我有一个 int 数组:
int[] a = {1, 2, 3};
我需要一个类型集:
Set<Integer> s;
如果我执行以下操作:
s = new HashSet(Arrays.asList(a));
当然,它认为我的意思是:
List<int[]>
而我的意思是:
List<Integer>
这是因为 int 是原始类型。如果我使用了 String,一切都会起作用:
Set<String> s = new HashSet<String>(
Arrays.asList(new String[] { "1", "2", "3" }));
如何轻松、正确、简洁地从:
A) int[] a...
至
B) Integer[] a ...
谢谢!
原文由 Robottinosino 发布,翻译遵循 CC BY-SA 4.0 许可协议
一些进一步的解释。 asList 方法具有此签名
所以如果你这样做:
或这个:
在这些情况下,我相信 java 能够推断出您想要一个 List 返回,因此它填充了类型参数,这意味着它需要 Integer 参数来调用方法。因为它能够自动装箱从 int 到 Integer 的值,所以没问题。
但是,这不起作用
因为从原始到包装器的强制转换(即 int[] 到 Integer[])没有内置到语言中(不知道他们为什么不这样做,但他们没有这样做)。
因此,每个基本类型都必须作为它自己的重载方法来处理,这就是 commons 包所做的。 IE。