zoukankan      html  css  js  c++  java
  • @lombok使用注意事项

    @Lombok

    如果只使用了@Data,而不使用@EqualsAndHashCode(callSuper=true)的话,会默认是@EqualsAndHashCode(callSuper=false),这时候生成的equals()方法只会比较子类的属性,不会考虑从父类继承的属性,无论父类属性访问权限是否开放。

    比如以下代码:

    @Data
    public class A {
        private String name;
    }
    public class B extends A {
        private String sex;
    
        static{
    	B b1 = new B("a","男");
    	B b2 = new B("b","男");	
    	System.out.println(b1.equals(b2))//true
        }
    }
    

    修复此问题的方法很简单:

    1. 使用@Getter @Setter @ToString代替@Data并且自定义equals(Object other) 和 hashCode()方法,比如有些类只需要判断主键id是否相等即足矣。
    2. 或者使用在使用@Data时同时加上@EqualsAndHashCode(callSuper=true)注解。
  • 相关阅读:
    多态
    java8的十大新特性
    Floyd最短路径算法
    ES6(六)函数扩展
    ES6(五)数组扩展
    ES6(四)数值扩展
    ES6(一)解构赋值
    store封装
    ipad方案
    pyinstaller编译打包为pyd
  • 原文地址:https://www.cnblogs.com/wigginess/p/14858118.html
Copyright © 2011-2022 走看看