現在、次の問題に直面しています。
equals() - メソッドがオーバーライドされている特定のクラスがあります。ただし、それが使用されているかどうかはわかりません(私のプロジェクトまたは同僚のプロジェクトのいずれかで)。調べる方法はありますか?参照を検索すると、オブジェクト equals() - メソッド (かなりの数) へのすべての参照が表示されます。それらすべてをスキャンするよりも簡単な方法がきっとあるはずです...
誰でもアイデアを得ましたか?
不可能なタスクを解決するよう Eclipse に依頼しています。
特定のオーバーライドされたメソッドが呼び出されたかどうかを判断することは、静的に決定できません。これが、Eclipse が応答を近似する理由です。
いくつかのフィールドがObject o
あり、ある時点でフィールドがあるとしますo.equals(...)
。o
オブジェクトを参照できるかどうかを判断するには、考えられるすべての実行パスYourClass
に沿ってランタイムの型を判断する必要がありますがo
、これは静的に行うことはできません。
それが不可能な理由は、コンパイラが次のコードを拒否する理由と非常によく似ています。
Object o = "hello";
System.out.println(o.length());
あなたができる最善のことは、ブレークポイントを設定するか、たとえば equals メソッド内から UnsupportedOperationException をスローすることによって、おそらくプログラムをデバッグすることです。
その点でJavaは壊れているようです。そのため、難しい方法で実行し、すべての発生をキャッチする必要があります。
純粋に静的分析によってこれを確実に行う方法は考えられません(存在するかどうかは疑問です)。
役立つ可能性のある実用的な方法は、メソッドの最初の行にブレークポイントを設定equals()
し、Eclipse デバッガーでプログラムを開始することです。メソッドが呼び出されるたびに、Eclipse はデバッガーを中断します。この時点で、コール スタックを調べて、誰がメソッドを呼び出したかを確認できます。
これを効果的に行うには、どのコード パスでメソッドを呼び出すことが期待できるかをある程度把握しておく必要があります。メソッドをトリガーできない場合、これは誰もそれを使用していないことを証明するものではありません。
Eclipse -> Package Explorer または Outline ビューでメソッド名を選択し、F4 をクリックします。または、メソッドを選択することもできます -> 右クリック -> 呼び出し階層を開く
これにより、ワークスペースでこのメソッドを呼び出しているすべてのメンバーが表示されます。お役に立てれば
オーバーライドされた equals を次のように変更するのはどうですか:
log.debug // Whatever you want
return this == obj;
古典的な Object equals はどれですか? それとも、クラスを拡張する場合は super.equals でしょうか?