我正在尋找一個用於實例化集合並向其中添加幾個項目的緊湊語法。我目前使用的語法:用於實例化初始化集合的緊湊語法
Collection<String> collection =
new ArrayList<String>(Arrays.asList(new String[] { "1", "2", "3" }));
我好像記得有這樣做的,它使用的ArrayList
一個匿名子類的更緊湊的方式,然後將在子類的構造函數的項目。但是,我似乎無法記住確切的語法。
我正在尋找一個用於實例化集合並向其中添加幾個項目的緊湊語法。我目前使用的語法:用於實例化初始化集合的緊湊語法
Collection<String> collection =
new ArrayList<String>(Arrays.asList(new String[] { "1", "2", "3" }));
我好像記得有這樣做的,它使用的ArrayList
一個匿名子類的更緊湊的方式,然後將在子類的構造函數的項目。但是,我似乎無法記住確切的語法。
http://blog.firdau.si/2010/07/01/java-tips-initializing-collection/
List<String> s = Arrays.asList("1", "2");
也許這是
Collection<String> collection = new ArrayList<String>() {{
add("foo");
add("bar");
}};
也稱爲雙支架初始化。
我猜你正在考慮
collection = new ArrayList<String>() { // anonymous subclass
{ // anonymous initializer
add("1");
add("2");
add("3");
}
}
其中,一個comapcted,給人
collection = new ArrayList<String>() {{ add("1"); add("2"); add("3"); }}
的fugly,至少可以這樣說。但是,Arrays.asList方法有一個變體:Arrays.asList(T...a)
,它提供了可協作性和可讀性。作爲一個例子,它給出了下面的一行代碼:
collection = new ArrayList<String>(Arrays.asList("1", "2", "3")); // yep, this one is the shorter
同時注意不要創建可疑使用ArrayList中的一個匿名子類。
也許這只是我,但我沒有看到的事情複雜了點,純粹是爲了追求更短的寫/更快的代碼。由於可以選擇少量代碼行,並且更容易調試/修改,所以我很確定我會選擇第二個選項。所以除非有特別的理由要求保持這個短小,否則我會說堅持Ockham的剃鬚刀,並給出一些問題的解決方案,請使用最簡單的方法。這樣,當某些事情出錯時(墨菲的法律明確規定它會這樣),您將有更容易的時間來追蹤它。 :)
您可以創建一個效用函數:
@SafeVarargs
public static <T> List<T> listOf(T ... values) {
return new ArrayList<T>(Arrays.asList(values));
}
所以,你可以把它想:
collection = MyUtils.listOf("1", "2", "3");
這樣的話,你可以很容易填充列表,並仍然保持可變。
但是,如果你不需要結果是可擴展的,那麼只有這樣。 – 2010-09-22 13:21:46
@Michael:喲! – nanda 2010-09-22 13:23:37