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 ...
随机推荐
- JS创建对象的几种方式整理
javascript是一种“基于prototype的面向对象语言“,与java有非常大的区别,无法通过类来创建对象.那么,既然是面象对象的,如何来创建对象呢? 一:通过“字面量”方式创建对象 方法:将 ...
- Oracle数据库实例的启动及关闭
要启动和关闭数据库,必须要以具有Oracle 管理员权限的用户登陆,通常也就是以具有SYSDBA权限的用户登陆.一般我们常用SYS用户以SYSDBA连接来启动和关闭数据库.下面介绍Oracle数据库几 ...
- js监听手机端点击物理返回键或js监听pc端点击浏览器返回键
之前在项目中遇到一个问题,就是在微信网页上面本来是有返回按钮的,但是大多数人都为了方便,会使用安卓手机自带的物理返回键,这个返回键按下后,就会按照你浏览器的栈存储的路径来一层一层返回,就不执行你页面上 ...
- 腾讯地图key秘钥
腾讯地图key:5WNBZ-2JYR6-SPUSL-M3WGH-U4KDT-K2FYV
- 怎么用js实现jq的removeClass方法
1.addClass:为指定的dom元素添加样式. 2.removeClass:删除指定dom元素的样式. 3.toggleClass:如果存在(不存在),就删除(添加)一个样式. 4.hasClas ...
- ELK之安装了search guard认证后安装elasticsearch-head
安装searc guard参考https://www.cnblogs.com/minseo/p/10576126.html 安装elasticsearch-head参考 https://www.cnb ...
- Codeforces 1136C - Nastya Is Transposing Matrices
题目链接:https://codeforces.com/problemset/problem/1136/C 题意: 给出 $n \times m$ 的矩阵 $A,B$,你可以对其中任意某个 $k \t ...
- 浅谈Vue.use
我们先来看一个简单的事例首先我使用官方脚手架新建一个项目vue init webpack vue-demo然后我创建两个文件index.js plugins.js.我将这两个文件放置在src/clas ...
- 部署WEB项目到服务器(二)安装tomcat到linux服务器(Ubuntu)详解
突发奇想,想在自己电脑上部署一个web网站. 1,先去tomcat官网下载一个适合linux的版本:tar.gz 2,然后通过FileZIlla传到服务器的/opt目录: 3,然后创建目录 并解压缩 ...
- 【托业】【跨栏阅读】错题集-REVIEW1
05 06 REVIEW 1