1.问题
public static void asList() { System.out.println(Arrays.asList(new String[] { "a", "b" })); System.out.println(Arrays.asList(new Integer[] { 1, 2 })); System.out.println(Arrays.asList(new int[] { 1, 2 }));
System.out.println(Arrays.asList(new Object[] { new int[] { 1, 2 } }));
System.out.println(Arrays.asList(new String[] { "a", "b" }, "c")); //正确方式 apache common lang
System.out.println(Arrays.asList(ArrayUtils.toObject(new int[] { 1, 2 })));
}
[a, b]
[1, 2]
[[[email protected]]
[[[email protected]]
[[Ljava.lang.String;@2077d4de, c]
[1, 2]
因Java语言规范规定了调用一个声明为foo(T… t)的方法,比如foo(new T[]{bar,baz})等同于foo(bar,baz)这样的调用。在Arrays.asList方法中T是参数类型,
因此它必须为一个Object 类型,但是int不是,而int[]却是。Arrays.asList作为一个反面教材,告诉了我们在使用Java的可变参数设计API时为什么要非常小心。
参考:
http://www.importnew.com/14996.html
时间: 2024-10-16 12:08:52