Lombok的@ [No | All | Required] ArgsConstructor注释的onConstructor属性仅适用于Java 7样式吗?

问题描述

根据documentation,Lombok具有3个用于生成构造函数的注释:

它们都具有onConstructor属性,可让您指定用于标记生成的构造函数的注释。

根据Javadoc,此功能的语法取决于JDK版本(我们对此无能为力;这是针对Javac错误解决方案。)

直到JDK7:

@NoArgsConstructor(onConstructor=@__({@AnnotationsGoHere}))

从JDK8:

@NoArgsConstructor(onConstructor_={@AnnotationsGohere}) // note the underscore after onConstructor

我正在研究JDK8。但是,只有JDK7变体对我有用,而JDK8变体不起作用(会生成没有注释的构造函数)。

我检查了JDK11-相同的结果。

我用 Refactor-> Delombok-> @Constructors 检查。

例如,像这样:

@AllArgsConstructor(onConstructor = @__(@Deprecated))
public class SomeClass {
}

生成以下代码

public class SomeClass {
    @Deprecated
    public SomeClass() {
    }
}

但是像这样:

@AllArgsConstructor(onConstructor_ = @Deprecated)
public class SomeClass {
}

生成如下代码

public class SomeClass {
    public SomeClass() {
    }
}

我注意到Lombok网站上的文档仅包含一个JDK7样式示例。

Javadoc不正确,或者我做错了什么?

解决方法

我发现,这不是Lombok的错误,而是Lombok IntelliJ plugin的错误。

构造函数注释会添加到已编译的代码中。

Lombok IntelliJ插件的Delombok工具错误地将Lombok的注释转换为原始Java代码。