Сравнение возвращаемых значений .getClass() и .class

#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 Так что они все-таки разные, хороший улов!