我正在使用Java 8和Spring。最近我有一个奇怪的(对我来说)问题。基本上,我有两类: 1.它是一个基类:等于基础和扩展类不能正常工作
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.一种@Configuration类,它扩展了的基类:
@Configuration
@ConfigurationProperties(prefix = "config")
@RefreshScope //org.springframework.cloud.context.config
public MyClass extends BaseClass {
private int variableB;
/* getter and setter method */
}
我想要的是,以检查是否两个类是相等的,只考虑baseClass中的变量。示例方法
public boolean areTheyEqual(BaseClass a, MyClass b) {
return a.equals(b);
}
在areTheyEqual
类a
和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?
编辑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);
}
}
在我的问题是什么并不重要是equals
实现(顺便说一句,通过的IntelliJ生成的方法)。
我的“工作正常”的定义是: 1.当variableA
在基类是MyClass中一样variableA
然后equals
返回true 2.如果不是1则假
您能向我们展示等于代码吗 –
我们不能回答这个问题,因为缺少太多的代码,我们不知道您的“正常工作”定义是什么。 “MyClass”中的“它被设置为某个值”是什么意思?它在哪里设置,以及如何?你的问题完全不清楚。 – ajb
在'BaseClass'里面显示你的equals方法 – additionster