onconstructor属性是lombok的@[no | all | required]argsconstructor注解工作的java 7样式吗?

monwx1rj  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(617)

根据文档,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不正确还是我做错了什么?

xxls0lw8

xxls0lw81#

我发现,这不是lombok的bug,而是lombok intellij插件bug。
构造函数注解加载项编译代码。
lombok intellij插件的delombok工具将lombok的注解转换为普通java代码。

相关问题