当使用 Guava 的ImmutableCollection作为函数的参数时,最好要求ImmutableCollection
作为参数类型:
void <T> foo(ImmutableCollection<T> l)
或者该函数应该采用 aCollection<T>
并创建一个不可变集合本身,如
void <T> foo(Collection<T> l)
{
ImmutableCollection<T> l2 = ImmutableCollection.copyOf(l);
// ...
}
第一个版本似乎更可取,因为调用者确信他传递给函数的映射没有被它修改。但是第一个版本需要带有集合调用的客户端代码copyOf()
,即:
Collection collection = map.values();
foo(ImmutableCollection.copyOf(collection));
// instead of simply
foo(collection);
PS:这并不完全正确,因为ImmutableCollection
没有copyOf()
but ImmutableList
and ImmutableSet
do。