2016-04-14 90 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()反正