将不可变列表传递给ImmutableList.copyOf()?

时间:2016-04-14 17:19:19

标签: java guava immutability defensive-copy

我有以下代码:

private static final ImmutableMultimap<String, String> namesToAddress;

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

我的问题是防守copyOf()在这里是必要的,因为get()还是会返回一个不可变的列表?

注意我正在使用Google Guava的ImmutableMultiimap。

感谢。

1 个答案:

答案 0 :(得分:5)

一些事情(大部分都在评论中,但作为答案):

  • 如果您使用ImmutableListMultimap作为namesToAddresses的类型,get()将返回ImmutableList;无需致电copyOf或演员或其他
  • 即使您不这样做,ImmutableMultimap.get()也会返回ImmutableCollection; ImmutableCollection有一个asList()方法可以将该集合视为ImmutableList
  • 进行查看(或在必要时复制)
  • 调用ImmutableList.copyOf(ImmutableCollection)最终会在收藏中调用asList()