【问题标题】:Constructor annotation on java recordsjava记录上的构造函数注释
【发布时间】:2021-07-14 00:59:50
【问题描述】:

有没有办法获得像 ConstructorProperties 这样具有 @Target(CONSTRUCTOR) 的注解来注解生成的 java 16 记录的构造函数?例如:

@ConstructorProperties({"id", "filename"})
public record Person(long id, String filename) {}

这个 ^ 会导致以下错误:

java: annotation type not applicable to this kind of declaration

【问题讨论】:

    标签: java constructor annotations java-record java-16


    【解决方案1】:

    这行得通:

    public record Person(long id, String filename) {
        @ConstructorProperties({"id", "filename"})
        public Person {}
    }
    

    我的理解是,没有参数列表的内部构造函数是一种向使用组件列表创建的默认构造函数添加逻辑的方法。显然,向其中添加构造函数注释具有我所追求的最终结果:)

    【讨论】:

    • 是的,这是推荐的解决方案。您描述的语法形式称为紧凑构造函数;这是声明记录的规范构造函数的一种简洁方式,该构造函数的参数列表与记录的参数列表匹配。
    • 如果 Java Beans 得到更新来识别记录,那就更好了,不需要 @ConstructorProperties 注释......
    • @BrianGoetz 你确定吗?我读过openjdk.java.net/contribute 并得到不同的印象。对于一个局外人来说,它需要一个小时来实现,而试图将它放入 JDK 需要几个星期......
    • @Holger 前几次肯定会花费更长的时间。是的,非代码方面可以掩盖代码方面——这对我的工作来说也是如此。但这正是“贡献”在 Java 规模上的含义——代码只是工作的一小部分。 (所以是的,欢迎贡献,但“这是我的代码”并不是大多数人认为的贡献。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多