根据文档,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->@构造函数检查。
例如,如下所示:
@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不正确还是我做错了什么?
1条答案
按热度按时间xxls0lw81#
我发现,这不是lombok的bug,而是lombok intellij插件bug。
构造函数注解加载项编译代码。
lombok intellij插件的delombok工具将lombok的注解转换为普通java代码。