FindBugsと呼ばれる静的分析ツールを使用して次のコードを分析しています。
if(str.equals(enum.SOMEVALUE)) {// do something};
ここで、strは文字列、enumは列挙型です。ツールは、このコードに対して次の警告を生成し、次のように記述します
このメソッドは、共通のサブクラスを持たない異なるクラスタイプの2つの参照に対してequals(Object)を呼び出します。equals()のコントラクトによれば、異なるクラスのオブジェクトは常に等しくないものとして比較する必要があります。したがって、java.lang.Object.equals(Object)で定義されたコントラクトによれば、この比較の結果は実行時に常にfalseになります。
上記のコード行を次のように置き換えると、次のようになります。
if(str.equals(enum.SOMEVALUE.toString())) {// do something};
その後、警告は消えますが、ツールが生成する警告が本当に正しいかどうか、そしてそれを正しい方法で修正しているかどうかはわかりませんか?私は以前にそのような比較を見たことがあり、それは正しく機能しているように見えるからです。