私はJavaのばかげたことを理解していません。あなたが私のためにそれを片付けてくれることを望んでいました.
私が定義したHashset<Point> myHashSet = new HashSet<Point>();
次に、2 つの等しい Point ポイントを作成Point p1 and Point p2
し、それらを異なる変数/メモリ ロケーションに配置します。次に、.equals() メソッドをオーバーライドしてpublic boolean equals(Point other)
、最初のポイント p1 を HashSet に追加しました。
それから私は電話しますSystem.out.println(myHashSet.contains(p2)); // prints false
コンパイラは、作成時に「ああ、このハッシュセットは Point 型です」と推測できず、「Point がデフォルトの equals メソッドをオーバーライドしているかどうかを確認する必要があります...うん、それを呼び出しましょう!」と言うことができるのはなぜですか? .
代わりに、オブジェクトのジェネリック equals メソッドを呼び出して、メモリの場所を比較していると思いますか?
これの理由は、単に HashSet に別の Equals メソッドを使用する Point のサブクラスを含めることができるということですか? これが現在の動作について確認できる唯一の理由ですが、何かを見落としていると確信しています:)。どうもありがとう。