java关于泛型的实验代码_[改善Java代码]强制声明泛型的实际类型

Arrays工具类有一个方法asList可以把一个变长参数或数组变成列表,但是它有一个缺点:它所生成的List长度是不可改变的,而这在我们的项目开发中很不方便.

importjava.util.Arrays;importjava.util.List;public classClient {public static voidmain(String[] args) {

String[] strArray= {"1","18","71","61","51"};

List asList =Arrays.asList(strArray);//asList.add("tttt");//会在这一行报错:Exception in thread "main" java.lang.UnsupportedOperationException

System.out.println(asList);

}

}

如果你期望生成的列表长度是可变的,那就需要自己来写一个数组的工具类了.代码如下:

1 importjava.util.ArrayList;2 importjava.util.Collections;3 importjava.util.List;4

5 public classClient {6

7 public static voidmain(String[] args) {8 //正规用法

9 List list1 = ArrayUtils.asList("A","B");10 //参数为空

11 List list2 =ArrayUtils.asList();12 //参数为数字和字符串的混合

13 List list3 = ArrayUtils.asList(1,2,3.1);14 }15

16

17 }18

19 classArrayUtils{20 //把一个变长参数转变为列表

21 public static ListasList(T...t){22 List list = new ArrayList();23 Collections.addAll(list, t);24 returnlist;25 }26 }

与Arrays.asList的调用方式相同,我们传入一个泛型对象,然后返回相应的List.

这里有三个变量需要说明:

(1)变量list1

泛型实际的参数类型是String,返回的结果也就是容纳String元素的List对象.

(2)变量list2

传递的是空参数,编译器也不知道泛型的实际参数类型是什么,不过编译器会认为Object就是其泛型类型,也就是说list2的完整定义如下:

List list2 = ArrayUtils.asList();

这样编译时就不会给出"unchecked"警告了.

如果期望list2是一个Integer类型的列表,而不是Object列表,因为后续的逻辑会把Interger类型加入到list2中,如何处理?

强制类型转化,把asList强制转换成List?行不通,虽然Java的泛型是编译擦除式的,但是List和List没有继承关系,不能进行强制转换.

最好的解决办法是强制声明泛型类型,代码如下:

List list22 = ArrayUtils.asList();

asList方法要求的是一个泛型参数,那我们就在输入前定义这是一个Integer类型的参数,当然,输出也是Integer类型的集合了.

(3)变量list3

变量list3有两种类型的元素:整数类型和浮点类型,那它生成的List泛型化参数应该是什么呢?

Integer和Float的父类Number?你太高看编译器了,它不会如此的推断的,当它发现多个元素的实际类型不一致的时候就会直接确认泛型类型是Object.而不会去追查元素类的公共父类是什么,但是对于list3,我们更期望它的泛型参数是Number.参照list2变量,代码修改如下:

List list33 = ArrayUtils.asList(1,2,3.1);

Number是Integer和Float的父类,先把三个输入参数向上转型为Number,那么返回的结果也就是List类型了.

什么时候明确泛型类型呢?

一句话:无法从代码中推断出泛型类型的情况下,即可强制声明泛型类型.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一旦有辞职念头就干不长了吗_每天都有辞职不想上班的冲动,你有吗?

我从大学毕业到今天,工作的时间将近10年了。直到现在,我还经常有辞职的想法。我觉得现在职场真的不好混,不如意的事情十之八九,有了辞职冲动是非常正常的,不必一上来就刻意的否定,或者克制。依照我的职场经…

mysql 序号_脚本搭建Nginx、Redis、MySql、Maven

当你面对一个全新的Linux系统时,是如何部署搭建项目环境呢?是否是一个一个软件安装呢?小编在往期文章中介绍了相关软件的安装方法,但是你是否发现不同的软件安装下来是否会出现问题呢?今天就教大家如何使用脚本一键安装…

mysql数据库压缩备份_MySQL数据库之mysql数据库备份命令分享(mysql压缩数据库备份)...

本文主要向大家介绍了MySQL数据库之mysql数据库备份命令分享(mysql压缩数据库备份) ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。备份MySQL数据库的命令复制代码 代码如下:mysqldump -hhostname -uusername -ppassword databasename …

mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考

【环境介绍】云数据库MySQL 5.7【背景描述】业务需要:需要对16370077的表数据进行更新部分数据操作UPDATE P_MOXXXX_REXXXX SET FISAVAILABLE 1 WHERE FREG_ID IN (SELECT FREG_ID FROM P_MOXXXX_REXXXX_UPDATE_TEMP);【按照正常流程更新数据操作】使用archery的SQ…

业务中台建设与应用_容易网业务中台建设,助力企业数字化转型

“中台”这个概念自去年流行以来,至今仍然搅动着市场。期间,既有阿里、腾讯、百度、字节跳动、美团、滴滴等等头部互联网企业刮起的转型风,也有茅台延后中台签约、服装品牌CIO被开除等风波。尽管存在争议,但这不影响越来越多的企业…

java由大到小输出整数xvz_【视频+图文】Java经典基础练习题(三):输入3个整数,并将其由小到大输出...

java经典实例书店书畅想畅销书109.6元包邮(需用券)去购买 >目录https://www.cnblogs.com/Qpgshare/p/12588923.html一、视频讲解https://www.cnblogs.com/Qpgshare/p/12588923.html二、思路分析https://www.cnblogs.com/Qpgshare/p/12588923.html总结:https://ww…

压力测试过负载均衡_性能测试的方法有哪些?

压力测试:压力测试的关键字就是“极端”。通过对系统的极端加压,从而观察系统的所表现出来性能问题。再对此性能问题进行分析,从而达到系统优化的目的。所以压力测试就是一定要让系统出问题,如果系统没有出问题,那么压…

java比ios慢_Android为什么比iOS慢

有些人会觉Android应用没有iOS应用使用得流畅,我觉得主要原因有以下几点:第一,因为Android平台相较于iOS起步晚,平台不成熟,初期的开发者水平也有限,没有很关注性能优化,只是想做出可用的应用&a…

rdd转换成java数据结构_如何将CSV文件转换为RDD

一种简单的方法是拥有一种保留标头的方法。假设您有一个file.csv,例如:user, topic, hitsom, scala, 120daniel, spark, 803754978, spark, 1我们可以定义一个标头类,该标头类使用第一行的解析版本:class SimpleCSVHeader(header…

output怎么用_如何用 C++ 写一个可编程软件渲染器?

今天你想用最新的 D3D12 画一个三角形,少说也要上千行代码了,对于初学者来讲,这个门槛是非常高的,太多干扰了,而一千多行代码,已经足够你重头实现一个简易版 D3D 了,为什么不呢?比起…

java finereport_java报表工具FineReport常见的数据集报错错误代码和解释

在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释,如果…

python定义一个人类_Python类的定义、继承及类对象使用方法简明教程

Python编程中类的概念可以比作是某种类型集合的描述,如“人类”可以被看作一个类,然后用人类这个类定义出每个具体的人——你、我、他等作为其对象。类还拥有属性和功能,属性即类本身的一些特性,如人类有名字、身高和体重等属性&a…

android 反色 java_Android小米,魅族6.0状态栏不能反色解决方法

Android6.0及以上if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {Window window getWindow();window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(getResources().getColor(android.R.color.white));window.…

mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来触发器:某个表发生更改时自动处理。触发器是MySQL响应delete,insert&…

aws mysql价格_mysql – AWS RDS“转出”成本有多贵?

我在AWS上托管了一个社交网络网站.我是否会因RDS的“转移成本”而被收取费用(因为RDS将通过AWS连接到EC2)?这是否意味着我只需支付EC2’转账费用’?与“图像”带宽相比,“数据库”带宽有多贵?真的很感激任何输入.谢谢.解决方法:根据AWS文档,从…

python变量定义大全_详解python变量与数据类型

这篇文章我们学习 Python 变量与数据类型变量变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问。在 Python 中 变量命名规定,必须是大小写英文,数字和 下划线(_)的组合,并且不能…

java 数据库改操作_数据库的插入、修改、删除操作(java实现)

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JDBCTest {// 定义数据库访问参数String url "jdbc:sqlserver://localhost:1433; DatabaseNamelihongchao&…

python3安装pywin32_Python3 pywin32模块安装的详细步骤

python新手一枚,操作系统Win10 64 bit,Python版本,3.7因为某个脚本需要用到win32con 和win32api模块,run -- cmd ,使用easy_install pywin32 命令安装,提示错误,搜不到,网上搜了下教程&#x…

创建时间指定日期 java,Java避坑之如何创建指定时间Date对象

在翻看自己以前写的惨不忍睹的代码时,发现了自己曾经写的一个跟Date有关的坑。Date date new Date(2020, 1, 1);System.out.println(date);我的目的是想创建一个2020年1月1日的时间对象date,但是我们创建的date真的就代表2020年1月1日吗?错&…

pagerank数据集_从数据结构到算法:图网络方法初探

机器之心原创作者:朱梓豪编辑:Qing Lin如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地。其实早在很多年前,图神经网络就以图嵌入、图表示学习、网络嵌入等别名呈现出来,其实所有的这些方法本…