问题描述
根据documentation,Lombok具有3个用于生成构造函数的注释:
-
@NoArgsConstructor
-生成一个空的构造函数; -
@AllArgsConstructor
-生成一个初始化所有构造函数的构造函数 字段; -
@requiredArgsConstructor
-生成一个构造函数 仅初始化final
个字段。
它们都具有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代码。