当前位置: 首页 > 知识库问答 >
问题:

Varargs方法和基元类型[重复]

万浩淼
2023-03-14

J.Bloch在《Effective Java》中提到,将varargs方法与基元类型一起使用是不安全的。简而言之,arrays.aslist(1,2,4)的返回类型为list ,这听起来很合理。现在我试图自己复制这种行为,但做不到:

我的问题是,为什么类型被推导为list ,而不是像他所说的那样被推导为list ?这是否意味着,在Java8中,关于varargs的问题不再相关了,如果我们不太关心性能,我们可以在任何地方安全地使用它们。

共有1个答案

吴凯泽
2023-03-14

作者的意思很可能是,您不能传递基元类型元素的数组,并希望它像这样装箱

int[] intArray = {1,2,3};
Arrays.asList(intArray);

它将返回list 而不是list ,因为没有像int[]->integer[]这样的数组自动装箱,所以只有t..vararg可以使用的类型int[],因为泛型类型t不能表示基元类型。

其他可能的问题是,您正在阅读该书的第一版(发布于2001年),但自动装箱是在2004年发布的Java1.5(Java5.0)中添加的。

 类似资料:
  • 在Java 9中,在列表界面下,有一个新的()方法,根据Java文档: 名单。of()静态工厂方法提供了一种创建不可变列表的方便方法。

  • 有没有办法告诉Java不要试图从使用基元类型的方法引用中推断类型? 这是我写的一个方法,原因现在无关紧要: 现在,如果您将方法引用传递给返回原始类型的“isEquals”,该怎么办? 这一切都很好,但Java也会接受这种奇怪的用法: 这是因为编译器将推断类型参数T为"

  • 对不起,如果我的问题看起来很愚蠢。我在 .compareTo() 上遇到错误 无法在基元类型双精度上调用比较To(双精度)!我该如何解决这个问题?谢谢! 车辆等级: 数组类: 我的其他代码运行良好:

  • 本文向大家介绍Java Varargs中的方法重载和歧义,包括了Java Varargs中的方法重载和歧义的使用技巧和注意事项,需要的朋友参考一下 在Java中使用变量参数时存在歧义。发生这种情况是因为两种方法绝对可以有效地被数据值调用。因此,编译器不知道该调用哪种方法。 示例 输出结果 名为Demo的类定义了一个名为“ my_fun”的函数,该函数采用可变数量的浮点值。使用“ for”循环将这些

  • 我对这三种代码感到困惑 和 和 我知道第一个是一些包含值的变量,第二个是一些引用不同对象的变量,但是第三个是什么?我知道它们是引用数据类型。 但我不明白为什么和有多少物体被创造出来。。。如果有的话!

  • 问题内容: 我想用泛型和varargs实现一个函数。 这里的意图是断言传递给该函数的所有参数都是扩展作为第一个参数给出的Class的Class对象。因此main方法的前两行将进行编译,而第三行将生成错误。 我的问题是: 为什么前两行会显示“类型安全性:为varargs参数创建了Class的通用数组”消息? 我在这里想念什么吗? 附加问题: 如何重新设计它以防止在调用“ doNastyThingsT