2016-04-14 69 views
0

我有以下代碼:將不可變列表傳遞給ImmutableList.copyOf()?

private static final ImmutableMultimap<String, String> namesToAddress; 

public static List<String> getAddresses(String name){ 
    return ImmutableList.copyOf(namesToAddress.get(name)); 
} 

我的問題是wheter防守copyOf()這裏是必要的,因爲get()返回反正不可改變的名單?

注意我用的ImmutableMultiimap從谷歌番石榴。

感謝。

+2

'ImmutableMultimap#GET'返回'ImmutableCollection'。沒有必要複製它。如果您需要。然而'List' ... – Savior

+0

在谷歌番石榴文檔(http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableListMultimap.html)它規定mmutableMultimap#GET返回ImmutableList ... – user1974753

+3

另外'ImmutableList.copyOf'實際上不會反正複製'ImmutableList'。 –

回答

5

夫婦的事情(主要是涵蓋了意見,但作爲一個答案):

  • 如果使用ImmutableListMultimap作爲namesToAddresses類型,get()將返回ImmutableList;不需要調用copyOf或鑄或任何
  • 即使你不這樣做,ImmutableMultimap.get()將返回一個ImmutableCollection; ImmutableCollection■找一個asList()方法來查看(或必要時複製)的集合作爲ImmutableList
  • 調用ImmutableList.copyOf(ImmutableCollection)最終會在收集調用asList()反正