问题描述
我在项目中使用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
移到另一个字段。如果有c
,d
,e
应该全部使用常规(无注释)@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
)注释。
@*.Generated
和 Jacoco
(最近)等工具已经支持它。