[英]Why does method 'Arrays.asList()' not accept arguments of type {“”,“”}, but accepts (“”,“”)?
我對Java Collections
並不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()
方法使用{"","",""}
引發編譯錯誤,而不是("","","")
?
Arrays.asList
采用一個數組或該數組的所有元素作為參數。
所以你需要
Arrays.asList(new String[]{"someString", "noString", "abcString"})
要么
Arrays.asList("someString", "noString", "abcString")
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
這與允許在Java代碼中的什么地方省略類型並允許推斷數組有關-特別是,當直接分配給一個array = {foo, bar...}
,只能使用array = {foo, bar...}
適當類型的數組,而不是將其傳遞到其他地方的位置。
無論如何,你應該寫的是
Arrays.asList("someString", "noString", "abcString")
根本沒有{}
大括號。
您可以將字符串數組提供給Arrays.asList
:
Arrays.asList(new String[] {"a","b","c"});
或具有多個字符串(變量)
Arrays.asList("a","b","c");
只是
Arrays.asList({"a","b","c"});
不起作用,因為{"a","b","c"}
並不代表Java對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.