• Lombok 在继承类上面的注意


    找不到符号异常

    在控制台项目中配置Lombok

    编译会报错 找不到符号

    解决 方法:

    父类字段ToString不了

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class School {
    
      public int id;
    
      public String name;
    
      public String age;
    
    }
    
    @Data
    class ShangHai extends School {
      private String type;
    }
    
    

    测试:

    public class test1 {
    
    	public static void main(String[] args) {
    
    		ShangHai shangHai = new ShangHai();
    	 	shangHai.setId(1);
         	shangHai.setName("上海大学");
    		shangHai.setType("A");
    		System.out.println(JSON.toJSONString(shangHai));
    		System.out.println(shangHai.hashCode());
    		ShangHai shangHai2 = new ShangHai();
    		shangHai2.setId(2);
    		shangHai2.setName("华东师范");
    		shangHai2.setType("A");
    		System.out.println(shangHai2.hashCode());
    		System.out.println(JSON.toJSONString(shangHai2));
    		System.out.println(shangHai.equals(shangHai2));
    		System.out.println(shangHai.toString());
    		System.out.println(shangHai2.toString());
    	}
    }
    

    Output:

    {"id":1,"name":"上海大学","type":"A"}
    124
    124
    {"id":2,"name":"华东师范","type":"A"}
    true
    ShangHai(type=A)
    ShangHai(type=A)
    

    可以明显发现,School类里面的字段都没有toString,并且equals还是相等的。

    解决:

    @Data
    @ToString(callSuper = true)
    @EqualsAndHashCode(callSuper = true)
    class ShangHai extends School {
      private String type;
    }
    

    输出;

    {"id":1,"name":"上海大学","type":"A"}
    -890203766
    549614978
    {"id":2,"name":"华东师范","type":"A"}
    false
    ShangHai(super=School(id=1, name=上海大学, age=null), type=A)
    ShangHai(super=School(id=2, name=华东师范, age=null), type=A)
    

    其实在上面的情况时,鼠标放在@Data上,会自动提示异常

    Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add @EqualsAndHashCode(callSuper=false) to your type.

    大致意思是默认子类的equals和hashCode方法,不会包含或者考虑基类的属性。我们可以通过反编译工具查看项目target/classes目录下的ShangHai.class的hashCode方法,默认情况下属性都是使用的他自身的属性。

    当我们根据警告提示,加上注解@EqualsAndHahsCode(superCall=true) ,警告消失。

    lombok.config

    另外,lombok作者Roel也给出了解决办法,就是通过自定义lombok.config文件来解决。

    按照Roel的说法,lombok.config文件需要放在src/main/java文件夹下的目录中(也可以放在实体同级目录下),放在src/main/resources目录下,不会生效。下面,我们通过这种方式来解决这个警告的问题。

    config.stopBubbling=true
    lombok.equalsAndHashCode.callSuper=call
    

    注意上面的callSuper=call,并不是true,false

    可以看到,配置生效了,然后@Data注解这里的警告也立马消失了。

    参考:

    lombok注解@Data使用在继承类上时出现警告

    lombok踩坑与思考

    Lombok用于继承时应注意的点

  • 相关阅读:
    xcode
    2020上班第一天
    动态网页爬取方法
    静态网页爬虫获取数据的简单方法Xpath
    帆软9.0升级10.0(摘自帆软官方文档)
    linux下安装redis
    linux 命令笔记
    shell 编写mongodb linux下安装脚本
    pl/sql基础之三
    plsql基础二之集合
  • 原文地址:https://www.cnblogs.com/hongdada/p/10420016.html
Copyright © 2020-2023  润新知