1. ホーム
  2. java

[解決済み] Map.get(オブジェクトキー)が(完全な)ジェネリックでない理由は何でしょうか?

2022-03-23 06:26:18

質問

完全に汎用的なgetメソッドを持たないことにした理由は何でしょうか? のインターフェイスで java.util.Map<K, V> .

質問を明確にするために、このメソッドのシグネチャは

V get(Object key)

ではなく

V get(K key)

と不思議に思っているのですが、(同じことを remove, containsKey, containsValue ).

解決方法は?

他の方もおっしゃっていますが、その理由は get() に渡すオブジェクトと同じ型である必要はないためです。 get() このメソッドの仕様では、両者が等しいことが要求されているだけです。このことは equals() メソッドは、オブジェクトと同じ型だけでなく、オブジェクトをパラメータとして取り込みます。

一般に、多くのクラスが equals() が定義されており、そのオブジェクトは自分のクラスのオブジェクトとしか等しくなれないようになっていますが、Javaではそうでない箇所も多くあります。例えば List.equals() の実装が異なっていても、2つのListオブジェクトが同じListであり、同じ内容であれば等しいとしています。 List . そこで、この質問の例に戻ると、メソッドの仕様によれば Map<ArrayList, Something> を呼び出し、私が get() を使って LinkedList を引数にとり、同じ内容のリストであるキーを取得する必要があります。これは、もし get() は一般的なもので、引数の型が制限されている。