Guava のImmutableCollectionImmutableCollection
を関数のパラメーターとして使用する場合は、 as パラメーター型を要求することをお勧めします。
void <T> foo(ImmutableCollection<T> l)
または、関数が を取り、Collection<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: にはbutとdoImmutableCollection
がないので、これは完全に真実ではありません。copyOf()
ImmutableList
ImmutableSet