子类会继承Lombok注解吗?是否需要手动给子类添加@Data等注解?
你的推断完全正确,@Data、@NoArgsConstructor这类Lombok注解仅作用于当前被标注的类,不会自动继承到子类,也不会为子类生成对应代码,具体可以分两个维度说明:
1. 无参构造方法
父类Building标注的@NoArgsConstructor只会为Building类本身生成无参构造方法:
- 如果你的
House类没有手动定义任何构造方法,Java编译器会默认生成一个隐式的无参构造,自动调用父类的无参构造,这种场景下可以不手动加@NoArgsConstructor; - 如果你后续给
House类加了自定义的有参构造,Java默认的无参构造会消失,这时如果需要无参构造,就必须显式加@NoArgsConstructor或者手动写无参构造。
2. getter/setter等方法
父类的@Data只会为Building自身的4个属性生成getter、setter、toString、equals、hashCode方法,完全不会处理子类新增的属性:
你给House新增的numberOfRooms、numberOfBathrooms、houseType三个属性,如果不在House类上显式标注@Data,Lombok不会为这三个属性生成对应的getter、setter方法,你尝试调用setNumberOfRooms()、getHouseType()这类方法时会直接编译报错。
额外提示:如果希望子类的toString、equals、hashCode方法也包含父类的属性,可以额外给House类加@ToString(callSuper = true)、@EqualsAndHashCode(callSuper = true)注解。
内容的提问来源于stack exchange,提问作者Zhe Sheng Lim
相关产品推荐
相关产品推荐

