如何告诉lombok生成的getter是@Override

问题描述

我在项目中使用lombok,并且有一个界面:

public interface MyInterface{

    Object getA()
}

还有一堂课

@Getter
public class MyClass implements MyInterface{

      private Object a;

      private Object b

}

我已经检查了生成的类,并且该类中生成方法不是@Override

我想知道如何添加此注释? @Override丢失会带来什么后果?

这可能是另一个问题,但是sonarqube分析了此代码,并且sonar说从未使用私有字段a。

我已经看过有关sonarqube + lombok = false positives主题

但是在我的情况下,b不会产生误报。所以我不认为这是直接相关的

您是否看到了一种无需重新实现getA()即可避免此问题的解决方案?

解决方法

您可以使用注释的onMethod attribute将所需的任何注释添加到生成的方法中。

@Getter
public class MyClass implements MyInterface{
    @Getter(onMethod = @__(@Override))
    private Object a;
    private Object b
}

在这种情况下,出于风格考虑,我可能会将类级别的@Getter移到另一个字段。如果有cde应该全部使用常规(无注释)@Getter逻辑,则我将如上。

public class MyClass implements MyInterface{
    @Getter(onMethod = @__(@Override))
    private Object a;
    @Getter
    private Object b
}

您可能还想enable Lombok's generated annotations。这将防止某些工具(覆盖率,静态分析等)费力检查Lombok的方法。不确定在这种情况下是否有帮助,但是我几乎在所有项目中都启用了它。

lombok.addLombokGeneratedAnnotation = true
,

您可以使用@Override的{​​{1}}将@Getter添加到特定字段。

例如

onMethod

@Getter(onMethod = @__(@Override)) private Object a; 具有no affect on the code itself。它只是通知编译器该方法正在覆盖其超类中的方法。如果该方法未覆盖超类中的方法,则编译器将使构建失败。

,

通过Error Prone(或类似工具)防止丢失@Override 的误报检测的更通用方法是配置 Lombok 以使用 decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE 注释其生成的代码。这可以通过将以下条目添加到 Lombok 的 @lombok.Generated

lombok.config

请注意,这不是通用的解决方案 - 相关工具需要尊重 lombok.addLombokGeneratedAnnotation = true (或更好的任何 @lombol.Generated)注释。

@*.GeneratedJacoco(最近)等工具已经支持它。