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



我在我的项目中使用lombok,我有一个接口:

public interface MyInterface{
Object getA()
}

和一类

@Getter
public class MyClass implements MyInterface{
private Object a;
private Object b
}

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

我想知道如何添加此注释?缺少@Override会产生什么后果?

这可能是另一个问题,但声纳分析了这个代码,声纳表示从未使用过私人领域a。

我已经看过关于sonarqube+lombok=误报的主题

但在我的情况下,b不会产生假阳性。所以我不认为这与有直接关系

您是否看到了在不重新实现getA((的情况下避免这些问题的解决方案?

您可以使用注释的onMethod属性将您想要的任何注释添加到生成的方法中。

@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
}

您可能还希望启用Lombok生成的注释。它将防止一些工具(覆盖率、静态分析等(麻烦检查Lombok的方法。不确定它在这种情况下是否会有所帮助,但我几乎在所有项目中都启用了它。

lombok.addLombokGeneratedAnnotation = true

您可以使用@GetteronMethod@Override添加到特定字段。

例如

@Getter(onMethod = @__(@Override))
private Object a;

@Override对代码本身没有影响。它只是通知编译器该方法正在重写其超类中的一个方法。如果方法没有重写超类中的方法,编译器将导致生成失败。

通过Error Prone(或类似工具(防止遗漏@Override的误报检测的一种更通用的方法是将Lombok配置为使用@lombok.Generated注释其生成的代码。这可以通过在Lombok的lombok.config:中添加以下条目来全局实现

lombok.addLombokGeneratedAnnotation = true

请注意,这不是一个通用的解决方案——相关工具需要尊重@lombol.Generated(或者更好的是,任何@*.Generated(注释。

JacocoError Prone这样的工具(最近(已经支持它了

最新更新