#java #spring-boot #equals
Вопрос:
Я пытаюсь разработать некоторые микросервисы с помощью SpringBoot.
У меня есть проблема при сравнении (как мне показалось) одних и тех же значений и всегда получении результата false
. Это метод, который должен сравнить 2 значения:
@Override
public boolean accepts(Event event) {
System.err.println("In the accepts method of FlightResponsePipelineProcessor");
System.err.println(event.getValue().getClass());
System.err.println(FlightResponse.class);
System.err.println(event.getValue().getClass().equals(FlightResponse.class));
return event.getValue().getClass().equals(FlightResponse.class);
}
Когда метод выполняется, я получаю это в консоли:
In the accepts method of FlightResponsePipelineProcessor
class avro.schemas.v1.FlightResponse
class avro.schemas.v1.FlightResponse
false
Кто-нибудь знает, почему? Я предполагаю, что я неправильно понял, что .getClass() и .class возвращают, но в консоли это выглядело одинаково.
Комментарии:
1. при сравнении классов можно использовать оператор==. где/как вы печатаете это «ложь»?
2. Это строка, которая дает ложное значение: System.err.println(событие.GetValue().getClass().равно(FlightResponse.class));
3. Возможно, они загружены загрузчиками разных классов? (Я ничего не знаю о весеннем ботинке) Это одна из причин, по которой два
Class
объекта, представляющие один и тот же класс, не будут равны поequals
или==
.4. @Cydonia, ты можешь позвонить
Class.getClassLoader()
и распечатать их. Таким образом, вы можете легко увидеть, были ли они загружены одним и тем же загрузчиком классов5.
FlightResponse.class class loader: org.springframework.boot.devtools.restart.classloader.RestartClassLoader@2d989b2b event.getValue().getClass() class loader: jdk.internal.loader.ClassLoaders$AppClassLoader@277050dc
Так что они все-таки разные, хороший улов!