私はJava 8とSpringを使用しています。最近私は奇妙な(私のために)問題があった。基本的に、私は2つのクラスがあります。は、基本クラスと拡張クラスの間で等しいです。正しく動作しません。
public BaseClass {
private int variableA;
public BaseClass() {
/* this is an empty costructor */
}
public BaseClass(int a) {
this.variableA = a;
}
/* getter and setter method */
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
BaseClass that = (BaseClass) o;
/* (HERE) */
return variableA == that.variableA;
}
}
2. A @Configurationクラス、基底クラス拡張:
@Configuration
@ConfigurationProperties(prefix = "config")
@RefreshScope //org.springframework.cloud.context.config
public MyClass extends BaseClass {
private int variableB;
/* getter and setter method */
}
私が欲しいのは、かどうかを確認することですがこれは、基底クラスである 1 2つのクラスは等しく、baseClassの変数のみを考慮します。クラスa
とb
が正しく満たされているareTheyEqual
方法では例の方法
public boolean areTheyEqual(BaseClass a, MyClass b) {
return a.equals(b);
}
。 BaseClass.equals
を見て、(HERE)
と書いたとき:BaseClass
をMyClass
から作成しました。 NullPointerではありませんが、variableA
は0です(MyClassでは値に設定されています)。どうしてか分かりません!
しかし
私は方法areTheyEqual
を変更する場合:
public boolean areTheyEqual(BaseClass a, MyClass b) {
return a.equals(new BaseClass(b));
}
すべてが正常に動作します。なぜ私は本当に不思議です。それは、いくつかの問題は、使用してequals
私は@ConfigurationクラスMyClassをObjectに、次にBaseClassにキャストしようとしていますか?
EDIT 1: 例:私の質問に
@Component
public class Example {
private MyClass myClass;
private BaseClass baseClass;
@Autowired
public Example(MyClass myClass) {
this.myClass = myClass;
this.baseClass = new BaseClass(myClass);
}
@Scheduled
private void checkMe() {
if(!areTheyEqual()) {
/* do something */
}
}
private boolean areTheyEqual() {
/* baseClass.variableA == 2 AND myClass.variableA == 2 */
return baseClass.equals(myClass);
}
}
は(ところでメソッドはのIntelliJによって生成される)equals
実装が何であるかは重要ではありません。
「正常に動作します」の私の定義は次のとおりです。その後、 1.基底クラスでvariableA
は、MyClassの中variableA
と同じである場合はtrueを返しますequals
2.そうでない場合は1、その後偽
あなたは私たちに等価コードplsを表示できます –
あまりにも多くのコードがありませんので、私たちはこれに答えることができません。あなたの定義が "うまくいく"ことはわかりません。 「MyClassで何らかの価値に設定されました」とはどういう意味ですか?それはどこで設定されたのですか?あなたの質問は完全に不明です。 – ajb
'BaseClass'の中にequalsメソッドを表示してください – additionster