Я использую 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
в BaseClass такая же, как variableA
в MyClass тогда equals
возвращает истину 2. Если нет, то 1. ложно
Вы можете показать нам код равных PLS –
Мы не можем ответить на это, потому что слишком много кода отсутствует, и мы не знаем, что такое определение «отлично работает». Что вы подразумеваете под «в« MyClass »было установлено какое-то значение»? Где он был установлен, и как? Ваш вопрос совершенно неясен. – ajb
Покажите свой метод равным в 'BaseClass' – additionster