使用Lombok子类继承父类,父类属性不生效问题及解决
使用Lombok子类继承父类,父类属性不生效
子类增加:
@ToString(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data
@Entity
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class SysRights extends BaseEntity {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String rightsId;
private String rightsName;
private String rightsUrl;
private String rightsIcon;
}
问题解决~~~~
Lombok 继承时应注意的点
lombok项目的产生就是为了省去我们手动创建getter和setter等基本方法的麻烦,它能够在我们编译源码的时候自动帮我们生成getter和setter等方法。
即它最终能够达到的效果是:
在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法
继承时的@Data
我们知道@Data注解在类,为类的所有字段注解@ToString、@EqualsAndHashCode、@Getter的便捷方法,同时为所有非final字段注解@Setter。
要注意@EqualsAndHashCode注解与@ToString注解默认情况下是忽略父类的成员变量的,测试代码如下:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class School {
public int id;
public String name;
public String age;
}
@Data
class ShangHai extends School {
private String type;
}
class test {
public static void main(String[] args) {
ShangHai shangHai = new ShangHai();
shangHai.setId(1);
shangHai.setName("上海大学");
shangHai.setType("A");
ShangHai shangHai2 = new ShangHai();
shangHai2.setId(2);
shangHai2.setName("华东师范");
shangHai2.setType("A");
System.out.println(shangHai.equals(shangHai2));
System.out.println(shangHai.toString());
System.out.println(shangHai2.toString());
}
}它的打印结果是:
true
ShangHai(type=A)
ShangHai(type=A)
在此可以发现,上述的两个实例没有对比父类的成员变量是否相同,仅仅对比的type字段的值,所以是true。同理,toString方法是不会打印父类的成员的。
使父类成员变量参与到逻辑中
这个解决很简单,仅仅需要给注解带上一个参数:
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
class ShangHai extends School {
private String type;
}打印结果:
true
ShangHai(super=School(id=1, name=上海大学, age=null), type=A)
ShangHai(super=School(id=2, name=华东师范, age=null), type=A)
注意:
由上述的代码演示,我们可以知道,在类继承的情况时应注意@Data注解不会涉父类的成员的坑,需要加callSuper = true的参数。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
springboot post接口接受json时,转换为对象时,属性都为null的解决
这篇文章主要介绍了springboot post接口接受json时,转换为对象时,属性都为null的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-10-10
启动SpringBoot报错Input length = 1问题及解决
这篇文章主要介绍了启动SpringBoot报错Input length = 1问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-05-05
SpringBoot+URule实现可视化规则引擎的方法示例
规则引擎其实是一种组件,它可以嵌入到程序当中,将程序复杂的判断规则从业务代码中剥离出来,使得程序只需要关心自己的业务,而不需要去进行复杂的逻辑判断,本文给大家介绍了SpringBoot+URule实现可视化规则引擎的方法示例,需要的朋友可以参考下2024-12-12
SpringBoot与Spring中数据缓存Cache超详细讲解
我们知道内存读取速度远大于硬盘读取速度,当需要重复获取相同数据时,一次一次的请求数据库或者远程服务,导致在数据库查询或者远程方法调用上小号大量的时间,最终导致程序性能降低,这就是数据缓存要解决的问题,学过计算机组成原理或者操作系统的同学们应该比较熟悉2022-10-10


最新评论