DR_Demons
@DR_Demons

Как сравнивает объекты java при использование lombok?

Всем доброго времени суток! Столкнулся со странным поведением, не могу понять в чем дело, по идее код аналогичный, но работает по разному.
Есть абстрактный класс AbstractCat

package animal;


import lombok.Data;

@Data
public abstract class AbstractCat {

    private String name;
    private Integer age;

}

у него есть наследник Cat
package animal;


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Cat extends AbstractCat {
    private String say;
}

аналогично им есть класс AbstractTransport его наследник Transport
package transport;

import lombok.Data;

@Data
public abstract class AbstractTransport {
    private Integer rnum;
    private String rtype;
}

package transport;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Transport extends AbstractTransport {

    private Integer arrt;
    private String where;
    private String vehid;
    private Integer rid;
    private String lastst;

}


Бойлерплейт в каждом классе сгенерирован с помощью lombok, соответственно им же переопределены методы equls и hashcode так что родитель.equals(потомок) true, но почему то при сравнение в случае с Cat и AbstractCat они true, а Transport и AbstractTransport false, хотя классы аналогичны, почему такое поведение?

import animal.AbstractCat;
import animal.Cat;
import transport.AbstractTransport;
import transport.Transport;

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        animal();
        System.out.println();
        transport();
    }

    private static void animal() {
        AbstractCat abstractCat = new AbstractCat() {
            @Override
            public void setName(String name) {
                super.setName(name);
            }

            @Override
            public void setAge(Integer age) {
                super.setAge(age);
            }
        };

        abstractCat.setAge(1);
        abstractCat.setName("Cat");

        Cat cat = new Cat();
        cat.setAge(1);
        cat.setName("Cat");
        cat.setSay("Hello");

        System.out.println("abstractCat.equals(cat) " + abstractCat.equals(cat));

    }

    private static void transport() {

        AbstractTransport abstractTransport2 = new AbstractTransport() {
            @Override
            public void setRnum(Integer rnum) {
                super.setRnum(rnum);
            }

            @Override
            public void setRtype(String rtype) {
                super.setRtype(rtype);
            }
        };

        abstractTransport2.setRnum(33);
        abstractTransport2.setRtype("М");

        Transport transport1 = new Transport();
        transport1.setRnum(33);
        transport1.setRtype("M");
        transport1.setWhere("dudl");

        System.out.println("abstractTransport.equals(transport1) " + abstractTransport2.equals((Transport)transport1));
        System.out.println("transport1.equals(abstractTransport) " + transport1.equals(abstractTransport2));

    }
}


Вывод:
abstractCat.equals(cat) true

abstractTransport.equals(transport1) false
transport1.equals(abstractTransport) false


Подскажите, кто знает?
Заранее Спасибо!
└── src
    ├── main
    │   ├── java
    │   │   ├── animal
    │   │   │   ├── AbstractCat.java
    │   │   │   └── Cat.java
    │   │   ├── Main.java
    │   │   └── transport
    │   │       ├── AbstractTransport.java
    │   │       └── Transport.java
    │   └── resources
    └── test
        ├── java
        └── resources
  • Вопрос задан
  • 187 просмотров
Решения вопроса 1
DR_Demons
@DR_Demons Автор вопроса
Вопрос решен, причина банальная невнимательность, вся проблема была в том что Rtype "М" была в разной раскладке))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы