加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么列表listOfArrays = Arrays.asList(new Integer

发布时间:2020-12-15 01:06:11 所属栏目:Java 来源:网络整理
导读:参见英文答案 How to create a List of Object arrays that has only one array? ????????????????????????????????????3个 1)好的 List 2)好的 List 3)编译错误类型不匹配:无法从List 转换列出 List 4)好的 List 这是asList:public static 的签名.列表与L

参见英文答案 > How to create a List of Object arrays that has only one array? ????????????????????????????????????3个
1)好的

List

2)好的

List

3)编译错误类型不匹配:无法从List< Integer>转换列出<整数[]>

List

4)好的

List

这是asList:public static< T>的签名.列表与LT; T> asList(T … a)

asList期望0或更多类型为“a”.我的“a”是新的Integer [] {1,它的类型为Integer [].那么,为什么要生成List< Integer>而不是List< Integer []>?

最佳答案
让我们看看问题示例(第3个):

List

如您所示,方法签名是:

public static 

在这种特殊情况下,单个Integer []被考虑用于T ….可以向T提供相同对象的数组或未指定数量.由于您指定了一个数组,因此T被视为整数(和T …变为整数[]).

当您将int []作为单个参数(1st)提供时,编译器不会自动将其包装到Integer [],因为这样的对象与int []不同.因为int不是一个对象,所以唯一可以适合T的对象类型是int [](它将参数构建为int [] []).

提供两个int [] s(2nd)更加明显,因为编译器只能将两个数组视为T …作为int [] s,因此T …也是int [] [].

当你提供两个Integer [] s(第四个)时,再次更明显的是编译器别无选择,只能将构成T …的两个参数视为Integer [](它变为单个数组:Integer [] []).

编辑:将数组作为vararg提供:

您可以提供单个阵列作为vararg.让我们举一个没有通用的例子:

public int iLoveMeSomeInts(int...nums)

将int []作为参数提供给此方法确实有效.为了验证签名,数组被视为一个整数,然后vararg被视为方法内部逻辑的int [].

你的例子的不同之处在于参数是T ….通用T必须是一个对象,因此在这种情况下编译器不能将int []视为int的vararg.然后编译器别无选择,只能将int []视为int []的vararg中的单个元素…(因为int []是一个对象).这没有任何含糊之处.

但是,因为Integer是一个对象,编译器将使用单个Integer []作为整数….

甚至更酷的是:如果你想要使用相关方法返回的Integer [],并且仍然只提供一个Integer [],你可以调用:

Arrays.

这会强制编译器将您的单个Integer []视为Integer [] ….

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读