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()ImmutableListImmutableSet