0

Java でライブラリ管理アプリケーションを構築しています。

という抽象クラスがありMaterialます。という抽象メソッドがありequalsます。

と呼ばれるサブクラスがあり、もちろん内部にあるのとまったく同じシグネチャで をNewspaper実装します。equalsequalsMaterial

public <T extends Material> boolean equals(Class<T> elementoAComparar) {
    if (this.getTitulo().equals(elementoAComparar.getTitulo()) && this.getFechaPublicacion().equals(elementoAComparar.getFechaPublicacion())) {
        return true;
    } else {
        return false;
    }
}

Java は のどのメソッドも解決できませんelementoAComparar。それらはすべて存在し、Newspaper拡張されMaterialます。

SOのこのスレッドで助けを得ましたが、実際に機能させることはできません。

私が実際に得ていないのは、ジェネリックパラメーターとして機能しているクラスのメソッドを使用する方法だと思います。

これはそれほど難しいことではないと確信していますが、Java の経験はほとんどありません。

ありがとう!

4

2 に答える 2

0

2 つのポイント:

  • Classオブジェクトはオブジェクト クラスを表し、equals通常はインスタンスの比較に使用されます。宣言equalsは、このオブジェクトをクラス オブジェクトと比較することを意味します。
  • equalsは で定義されjava.lang.Object、すべてのオブジェクトが継承します。比較の実装を Java ライブラリ コードで機能させるには、 をオーバーライドする必要がありますObject.equalsequalsは Java のジェネリックよりも前のものであるため、Object.equals使用しません。他のオブジェクトのフィールドを取得するには、実装で比較対象のインスタンスを確認し、それをオブジェクト タイプにキャストする必要があります。

Java で equals と hashCode をオーバーライドする場合、どのような問題を考慮する必要がありますか?の回答 良い要約とデモンストレーションを提供します。

于 2016-06-15T16:39:58.607 に答える