lombok.Getter cheated me

打印 上一主题 下一主题

主题 894|帖子 894|积分 2682

下面这段代码,IDE里正常显示。不过,在build时,会报错。
  1. interface Doable {
  2.     Integer getCode();
  3. }
  4. @lombok.Getter
  5. class DerivedClass implements Doable {
  6.     int code;
  7. }
复制代码
错误信息:
Error:(11, 5) java: DerivedClass不是抽象的, 并且未覆盖Doable中的抽象方法getCode()
Error:(13, 13) java: DerivedClass中的getCode()无法实现Doable中的getCode()
  返回类型int与java.lang.Integer不兼容

下面代码,IDE直接在int上标红线,提示错误:'getCode()' in 'DerivedClass' clashes with 'getCode()' in 'Doable'; attempting to use incompatible return type
  1. interface Doable {
  2.     Integer getCode();
  3. }
  4. class DerivedClass implements Doable {
  5.     @Override
  6.     public int getCode() {
  7.         return 1;
  8.     }
  9. }
复制代码
 
关于OOP中的方法覆写,遵从“一大两小”原则。其中“两小”中的一个“小”是派生类的返回值类型应≤父类。就是说,下面代码是没有问题的。
  1. interface Doable {
  2.     Number getCode();
  3. }
  4. class DerivedClass implements Doable {
  5.     @Override
  6.     public Integer getCode() {
  7.         return 1;
  8.     }
  9. }
复制代码
 
 
关于lombok的@Getter注解。首先要知道,我们熟知的lombok,分为lombok工具和lombok插件(IDEA插件:IntelliJ Lombok plugin)。lombok工具在代码编译期为类生成相应的方法代码,lombok插件是为类IDE增强类里的方法,就是说,lombok为类生成相关方法签名(就像我们人肉为类添加的方法那样,只不过插件是自动生成的),并告诉IDE。像上面的案例中,IDEA就检测到DerivedClass类中有getCode方法,所以不会给出错误提示。而在编译期,lombok工具为DerivedClass生成了int getCode方法,这时,IDEA编译器发现因不符合java覆写原则而报错。
之所以分享这个知识点,则源自昨天的一段代码。 我在项目中新增了一个枚举类PlatOrderInTypeEnum,见下面代码,其中的EnumAbility中有T getCode();方法。自然是想不到会有什么问题。结果在部署到测试环境时,Jenkins构建时出现如下maven compile error。
  1. /***
  2. * T_Plat_order表IN_TYPE枚举--用来标记交易来源 (API/客户提交/运营提交)
  3. * @author zhangguozhan
  4. * 2023-5-15 17:46:02
  5. */
  6. @Getter
  7. @AllArgsConstructor
  8. @EnumGetByCode
  9. public enum PlatOrderInTypeEnum implements EnumAbility<Integer> {
  10.     API(1, "结算接口提交"),
  11.     MERCHANT(0, "结算后台提交"),
  12.     BOSS(2, "运营后台导入");
  13.     private Integer code;
  14.     private String description;
  15. }
复制代码
Jenkins错误截图

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表