オブジェクトを拡張するオブジェクトの多数の配列リストを受け取りました。参照を高速化するために、それらをハッシュマップに挿入したいと考えています。コードの重複は頻繁に発生するため、コードの重複を避けるためのメソッドを作成することにしました。私が知っている方法はいくつかありますが、どれも非常にクリーンで美しいとは思えません。もっと簡単な解決策がないかどうか疑問に思っています。だからこういうのやりたい…
private void addToMap(Collections<? extends myObject> collection, Map<String, ? extends myObject> map){
for(MyObject myObject: collection){
map.put(myObject.getName(), myObject);
}
}
メソッドのコントラクトでは、提供されるコレクションが map と同じクラスを格納する必要があります。メソッドが例外をスローしても、誰かがその契約を破り、myObject の別の実装を格納したコレクションと格納されたマップを 2 つ渡そうとしたとしても問題ありません。
型の安全性を促進するために "? extends MyObject" を期待するコレクションに 'myObject' を入れることができないため、上記のコードは失敗します。私はそれをキャストするだけで大丈夫ですが、それをキャストする方法を理解するために私が知っている唯一の方法は、醜い反射のいくつかのステップを含み、複雑に見えます. ある種の内部クラスを作成して、より強力なジェネリックを使用できるようにすることもできます (コレクションとマップに同じ型を強制的に格納するため)。
では、読者にとって最も直感的な方法でこのメソッドを作成するための簡単できれいな方法はありますか? ジェネリックを完全に捨てて、オブジェクトからすべてをキャストできることはわかっています。よりエレガントな方法を見つけようとしています。