Lombok 的 @[No|All|Required]ArgsConstructor 注释的 onConstructor 属性 是否只工作 Java 7 样式?
Is onConstructor property of the Lombok's @[No|All|Required]ArgsConstructor annotation work Java 7 style only?
根据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 的注释转换为 vanilla Java 代码。
根据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 的注释转换为 vanilla Java 代码。