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

use*_*753 0 java immutability guava defensive-copy

我有以下代码:

private static final ImmutableMultimap<String, String> namesToAddress;

public static List<String> getAddresses(String name){
  return ImmutableList.copyOf(namesToAddress.get(name));
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Col*_*inD 5

几件事(大多数都在评论中,但作为答案):

  • 如果你使用ImmutableListMultimap的类型namesToAddresses,get()将返回一个ImmutableList; 无需打电话copyOf或演员或其他任何东西
  • 即使你不这样做,ImmutableMultimap.get()也会返回ImmutableCollection; ImmutableCollection有一个asList()方法来查看(或必要时复制)集合作为ImmutableList
  • 无论如何,呼叫ImmutableList.copyOf(ImmutableCollection)将最终调用asList()该集合