lombok.Getter cheated me

阅读: 评论:0

lombok.Getter cheated me

lombok.Getter cheated me

下面这段代码,IDE里正常显示。不过,在build时,会报错。

interface Doable {Integer getCode();
}@lombok.Getter
class DerivedClass implements Doable {int code;
}

错误信息:

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

interface Doable {Integer getCode();
}
class DerivedClass implements Doable {@Overridepublic int getCode() {return 1;}
}

关于OOP中的方法覆写,遵从“一大两小”原则。其中“两小”中的一个“小”是派生类的返回值类型应≤父类。就是说,下面代码是没有问题的。

interface Doable {Number getCode();
}
class DerivedClass implements Doable {@Overridepublic Integer getCode() {return 1;}
}

关于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>中有T getCode();方法。自然是想不到会有什么问题。结果在部署到测试环境时,Jenkins构建时出现如下maven compile error。

/**** T_Plat_order表IN_TYPE枚举--用来标记交易来源 (API/客户提交/运营提交)* @author zhangguozhan* 2023-5-15 17:46:02*/
@Getter
@AllArgsConstructor
@EnumGetByCode
public enum PlatOrderInTypeEnum implements EnumAbility<Integer> {API(1, "结算接口提交"),MERCHANT(0, "结算后台提交"),BOSS(2, "运营后台导入");private Integer code;private String description;}

Jenkins错误截图

本文发布于:2024-01-31 13:30:36,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170667903628878.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:lombok   Getter   cheated
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23