現在、マルチセットを使用して複製を許可するためにマルチマップクラスを実装しています。特に、私はそのboolean putAll(Multimap<? extends K, ? extends V> multimap)
方法に取り組んでいます。
私はこれをしたい:
Map<K, Collection<V>> map = ((Multimap<K, V>)multimap).asMap();
asMap()
通常はどこにMap<? extends K, Collection<? extends V>>
。を返します。
これは有効ですか(マップに追加しない限り、エラーはスローされません)?そうでない場合、どうすればこれを修正できますか?
いいえ、それはキャストは有効ではありませんのと同じ理由で、有効ではないですList<T>
しList<Object>
。
Multimap.asMap()
ドキュメントによると、ビューを返します。この意味は
Multimap<K, V> multimap = ...;
Map<SuperOfK, SuperOfV> map = (<some cast>) multimap.asMap();
map.put(superOfK, superOfV);
マルチマップを更新する必要があります。これ自体は結果にはなりませんがClassCastException
、キーを繰り返すようなことを行うと、次のようになります。
for (K key : multimap.keys()) { }
したがって、そのようにキャストすることはタイプセーフではないため、禁止されています。
もちろん、マルチマップが不変である場合、この問題は発生しませんが、一般的に、そうすべきではない理由です。そして、「マップに追加しない」と言うことは、コンパイラーにとって十分ではありません-あなたが追加しないことを知りません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加