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 在继承类上面的注意的更多相关文章
- 在Eclipse中设置Java类上面的注释(包含作者、日期等)
希望在Eclipse中,让Java类上面的注释像下面这样,改如何设置呢? 在Eclipse中,点击菜单中的Window-->Preferences,打开如下窗口:
- 虚函数列表: 取出方法 // 虚函数工作原理和(虚)继承类的内存占用大小计算 32位机器上 sizeof(void *) // 4byte
#include <iostream> using namespace std; class A { public: A(){} virtual void geta(){ cout < ...
- 当C++多继承遇上类型转换[转]
1 由来 客户用陈旧的VC++6.0进行项目开发,有一块功能需要我来实现.让一个早就习惯了VS2013的人去使用C++支持不太好的VC6去做开发实在是非常不爽,于是另辟蹊径,打算使用VC++201 ...
- 使用Json.Net处理json序列化和反序列化接口或继承类
以前一直没有怎么关注过Newtonsoft的Json.Net这个第三方的.NET Json框架,主要是我以前在开发项目的时候大多数使用的都是.NET自带的Json序列化类JavaScriptSeria ...
- JAVA类(上)
package test; public class staticAccess { public int age; public staticAccess grow() { age++; return ...
- jq源码解析之绑在$,jQuery上面的方法
1.当我们用$符号直接调用的方法.在jQuery内部是如何封装的呢?有没有好奇心? // jQuery.extend 的方法 是绑定在 $ 上面的. jQuery.extend( { //expand ...
- 实习第一周第一天:接口 extends是继承类,implement是实现接口,原接口里面的方法填充,方法名也是不变,重写override是父类的方法名不变,把方法体给改了
一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...
- 经典面试题:js继承方式上
js不是传统的面向对象语言,那么他是怎么实现继承的呢?由于js是基于原型链实现的面向对象,所以js主要通过原型链查找来实现继承,主要有两大类实现方式,分为基于构造函数的继承,以及非构造函数的继承. 由 ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
随机推荐
- CPanel/服务器文件及目录
cPanel服务器默认的各主要目录及配置文件的路径.cPanel服务器很多配置文件的路径和通常情况下安装LAMP的不同,另外还有很多是属于cPanel面板自己的配置文件. 目录 1 Apache 2 ...
- css的小知识4
---恢复内容开始--- 一.单位 1.px就是一个基本单位 像素 2.em也是一个单位 用父级元素的字体大小乘以em前面的数字.如果父级没有就继承上一个父级直到body,如果bod ...
- iOS之关于Architectures设置及Build Active Architecture Only编译设置
一,前言 最近在帮朋友解决极光报错的提示:“file was built for archive which is not the architecture being linked (i386)”时 ...
- linux下查看网卡速率
转自:http://blog.csdn.net/liugongfeng/article/details/50263733 我们都知道ifconfig -a 可以列出所有网卡,但是怎么判读是千兆网卡还是 ...
- 列表 & 元组& join & range
一:列表(增删改查,列表的嵌套,列表的循环) 1)增加 append (在列表的尾部增加) insert (插入) insert(插入的位置,插入的内容) extend ...
- python框架之Flask(5)-@app.before_request原理
示例 from flask import Flask app = Flask(__name__) @app.before_request def xx(): pass @app.route('/') ...
- 插入排序(Python实现)
目录 1. for版本--插入排序 2. while版本--插入排序 3. 测试用例 4. 算法时间复杂度分析 1. for版本--插入排序 def insert_sort_for(a_list): ...
- 深入理解Java虚拟机4-chap6-斗者1星
一.JVM语言无关性 1.以字节码为基础(Class文件为一组以8位字节为基础单位的二进制流),JVM与Class文件关联,而非与Java语言关联 2.代码编译从本地码(Native Code)转为字 ...
- 53.CSS---CSS水平垂直居中常见方法总结
CSS水平垂直居中常见方法总结 1.元素水平居中 当然最好使的是: margin: 0 auto; 居中不好使的原因: 1.元素没有设置宽度,没有宽度怎么居中嘛! 2.设置了宽度依然不好使,你设置的是 ...
- Oracle数据库基础入门《二》Oracle内存结构
Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...