how do I correctly override equals for inheritance in java?

后端 未结 2 1347
南旧
南旧 2021-01-21 03:34

I am using hibernate and id... is used for persistence (which is why it is omitted in comparison). (Also, using google guava helper equals)

HolidayPackageVariant:

<
2条回答
  •  夕颜
    夕颜 (楼主)
    2021-01-21 04:05

    Following the Secret of Equals:

    HolidayPackageVariant:

    public abstract class HolidayPackageVariant {
        private Integer idHolidayPackageVariant;
        private HolidayPackage holidayPackage;
        private String typeHolidayPackage;
    
        @Override
        public boolean equals(Object obj) {
            if (obj == this) return true;
            if(obj == null) return false;
    
            if (getClass().equals(obj.getClass())) {
                final HolidayPackageVariant otherPackageVariant = (HolidayPackageVariant) obj;
                return Objects.equal(getTypeHolidayPackage(),otherPackageVariant.getTypeHolidayPackage())
                        && Objects.equal(getHolidayPackage(),
                                otherPackageVariant.getHolidayPackage());
            }
            return false;
        }
    }
    

    FlightHolidayPackageVariant:

    public final class FlightHolidayPackageVariant extends HolidayPackageVariant{
        private Destination originCity;
    
        @Override
        public boolean equals(Object obj) {
    
            if(super.equals(obj)){
                return Objects.equal(getOriginCity(),
                        ((FlightHolidayPackageVariant)(obj)).getOriginCity());
            }
            return false;
        }
    }
    

    This will ensure that only the same Type of variants are equal to each other.

提交回复
热议问题