我不是Java Collections
的新手,但我对以下情况感到困惑。
在我的项目中,我实现了这样的代码:
List<String> obj_lStr= new ArrayList<String>();
String[] obj_arrStr = {"someString", "noString", "abcString"};
obj_lStr.addAll(Arrays.asList(obj_arrStr));
但在代码审查期间,我的项目主管向我提供了更改此代码并在不使用String[] obj_arrStr
的情况下实施该代码的说明。
然后我将代码更改为:
obj_lStr.addAll(Arrays.asList( { "someString", "noString", "abcString" }));
但是我遇到了编译错误:
Main.java:13: error: illegal start of expression
x.addAll(Arrays.asList({"someString", "noString", "abcString"}));
^
Main.java:13: error: ')' expected
x.addAll(Arrays.asList({"someString", "noString", "abcString"}));
^
Main.java:13: error: ';' expected
x.addAll(Arrays.asList({"someString", "noString", "abcString"}));
我将我的代码行更改为:
obj_lStr.addAll(Arrays.asList("someString", "noString", "abcString"));
然后编译错误就消失了。
问题:为什么会这样?为什么asList()
方法会使用{"","",""}
引发编译错误,而不是("","","")
引发编译错误?
答案 0 :(得分:4)
Arrays.asList
接受数组或数组的所有元素作为参数。
所以你需要
Arrays.asList(new String[]{"someString", "noString", "abcString"})
或
Arrays.asList("someString", "noString", "abcString")
答案 1 :(得分:3)
asList()
的签名有答案:public static <T> List<T> asList(T... a)
它需要一个varargs,所以obj_lStr.addAll(Arrays.asList("someString", "noString", "abcString"));
编译bcoz你的参数将变成一个数组。
但是obj_lStr.addAll(Arrays.asList( { "someString", "noString", "abcString" }));
,您需要指定数组的类型。所以你可以这样做:obj_lStr.addAll(Arrays.asList(new String[] { "someString", "noString", "abcString" }));
。
数组的{}
初始化语法仅在启动时可用,例如:
int[] a ={1,2,4}; // works
但是
int[] a new int[3];
a = {1,2,4}; // doesn't work
答案 2 :(得分:0)
这与Java代码中的哪些地方有关,你可以省略类型并允许推断数组 - 具体来说,当你直接分配到一个数组中时,你只能使用array = {foo, bar...}
适当的类型,而不是你在其他地方传递的地方。
无论如何,你应该写的是
Arrays.asList("someString", "noString", "abcString")
根本没有{}
个大括号。
答案 3 :(得分:0)
您可以将字符串数组提供给Arrays.asList
:
Arrays.asList(new String[] {"a","b","c"});
或使用多个字符串(varags)
Arrays.asList("a","b","c");
但只是
Arrays.asList({"a","b","c"});
不起作用,因为{"a","b","c"}
不代表Java对象
答案 4 :(得分:0)
如果您尝试查看javadocs
,您将了解asList
有签名
public static <T> List<T> asList(T... a)
现在,参数声明T... a
使用了一个名为variable arguments的java特性,这基本上只意味着参数a
可以是T类型的数组,或者,它可以是T类型的所有对象序列。
希望有所帮助。