マップで使用されるタイプを明示的に宣言する必要があります。
Map<MyKey,SomeOtherObject> map = new HashMap<MyKey, SomeOtherObject>();
map.put(new MyKey<CustomObject>(), new SomeOtherObject<CustomObject>());
2番目の例では、add
メソッドはジェネリックであるため、呼び出すと、KとVは、呼び出し元のコードで使用されている実際の型に置き換えられます。
編集
あなたはの意味を誤解しているようですMap<K, V>
。KとVには特定の意味はありません。これらは、特定のタイプのキーと特定のタイプの値のみを受け入れるようにマップを「パラメーター化」できることを示しているだけです。ただし、これらのタイプを定義するのはユーザーの責任です。
最初の例ではMyKey
、キー(K
)とSomeOtherObject
値( )のタイプとして使用しますV
。したがって、これらのタイプの特定のマップを作成する必要がありますMap<MyKey,SomeOtherObject> map = new HashMap<MyKey, SomeOtherObject>();
。
Map<K, V>
KとVはコンパイラにとって何の意味もないので、単純に書くことはできません(KというクラスとVというクラスを作成していない限り、作成していないと思います)。
2番目の例では、タイプKとVの2つのパラメーターを受け取るジェネリックメソッドを使用します。メソッドが呼び出されると、KとVは実際に受信したタイプに置き換えられるため、例のコードは非常に何かに変換されます。私の答えの上部にあるコードに似ています。
これが物事を明らかにすることを願っています。ジェネリックに関するチュートリアルを読んで、具体的な例を見てみることをお勧めします。