首页 > 其他分享 >@Getter cheated me

@Getter cheated me

时间:2023-05-16 14:22:44浏览次数:37  
标签:me getCode cheated int Getter DerivedClass Integer lombok Doable

下面这段代码,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 {

    @Override
    public int getCode() {
        return 1;
    }
}

 

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

interface Doable {
    Number getCode();
}
class DerivedClass implements Doable {

    @Override
    public 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错误截图

 

标签:me,getCode,cheated,int,Getter,DerivedClass,Integer,lombok,Doable
From: https://www.cnblogs.com/buguge/p/17405491.html

相关文章

  • SIEMENS/西门子TMS320F28335运动控制器 DSP28335驱动器 DSP28335运动控
    SIEMENS/西门子TMS320F28335运动控制器DSP28335驱动器DSP28335运动控制卡采用DSP28335作为主控支持有刷电机,无刷电机,伺服电机电机电机参数识别,运动控制支持速度环,位置环,编码器,模拟量接口支持CANOPEN,modbus总线包括原理图,源代码已移植量产使用,具有极高的参考价值ID:821896940360050......
  • SIEMENS/西门子西门子S7-1200 PID温度控制程序,PID参数经过预调节和精确调节之后得出,
    SIEMENS/西门子西门子S7-1200PID温度控制程序,PID参数经过预调节和精确调节之后得出,程序采用博图V16高级版编写,适合用于不带冷却功能的模具加热生产工艺上,项目上运用已稳定工作多时,带详细注释,可进行二次开发和扩展,也可直接使用!!本程序采用博图V16编写,需要博图版本高于V16,版本低于V......
  • Joda Time : 处理时间问题
    更多的详细介绍:Joda-Time简介[url]http://h819.iteye.com/blog/611099[/url]你觉得一个API设计得差到什么份上,才会把自己差不多的API全部Deprecated掉。java.util.Date便是这样的奇葩。因为它的API几乎都是反直觉的,几乎所有敢于用它的Java程序员都吃过它的亏。想初始化个2013......
  • tomcat startup.bat配置JAVA_HOME
    使用zip的tomcat包,不改变系统的环境变量JAVA_HOME的情况下启动:我用的是tomcat6.0.16在tomcat内部修改JAVA_HOME:bin/catalina.bat中头部添加setJAVA_HOME="D:\jdk\jdk1.6"估计在bin/startup.bat添加也可以,没有测试。要保留startup.bat运行的输出日志():修改startup.ba......
  • prometheus 监控 exsi vcenter,kvm libvirt
    转自:https://www.scriptjc.com/article/1284 prometheus监控exsivcenter,kvmlibvirt来源:原创时间:2021-10-20作者:脚本小站分类:Linux监控vcenter:github地址:1https://github.com/pryorda/vmware_exporter启动:1234567#!/bin/bash ......
  • jqMobi中Side Menu实现
    记得以前在做NativeApp的时候类似于人人网侧边滑动的效果非常的热,很多app仿照该效果进行开发,在jqMobi中也有类似的效果被称为SideMenu.下面我们来一步一步实现该效果。首先新建一个html文件,引入jqMobi的框架,如下: 1.<!DOCTYPEhtml>2.<head>3.<metacharset="utf-8">......
  • android 获取 imei号码
    核心代码:Imei=((TelephonyManager)getSystemService(TELEPHONY_SERVICE)).getDeviceId();1.加入权限在manifest.xml文件中要添加<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>2.代码 1./**2.*3.*4.*创建日期2010-4-29下午05:02......
  • Vue.js(十) element-ui PC端组件库
    一:简介饿了么公司基于Vue开发了两套UI组件库,PC端组件库和移动端组件库。一部分组件库是对原生的HTML标签元素的封装,增加了一些新的功能。另一部分组件库是原生HTML标签元素没有的,是一些比较常用的独立的功能(如:分页、进度条、加载中、树形控件等),将这些独立的常用的功能封装成......
  • delphi Pascal yolov5 deepsort 目标检测 目标跟踪,支持onnxruntime、dnn、openvino和t
    delphiPascalyolov5deepsort目标检测目标跟踪,支持onnxruntime、dnn、openvino和tensorrt推理yolov5,使用c++封装成dll,delphi调用封装好的dll,实现目标检测和跟踪ID:212600676471966472......
  • yolov5v6.2 实例分割 Labview工业应用,封装dll后labview调用,支持openvino dnn onnxrunt
    yolov5v6.2实例分割Labview工业应用,封装dll后labview调用,支持openvinodnnonnxruntime和tensorrt四种方式推理,500万像素图像:cpu下openvino推理只要85ms、GPU下tensorrt推理只要25ms,最强实例分割模型。ID:114500689839116112......