关于@ConstructorProperties
Documentation说“构造函数上的注释,显示该构造函数的参数如何与构造对象的getter方法相对应”。它给出了一个含糊不清的例子,因为变量名称与参数相同。
我真的不明白为什么@ConstructorProperties({"x", "y"})
指的是吸气剂getX()
和getY()
。 x和y的情况与注释不一致。
所以要澄清这段代码中构造函数的注释应该是什么:
public class Point {
public Point(int a, int b) {
this.c = a;
this.d = b;
}
public int getCc() {
return c;
}
public int getDd() {
return d;
}
private final int c, d;
}
(我编辑了代码,因为从答案来看,我理解注释要求代码遵循getter的常见案例约定,例如cc
getter必须是getCc()
。但我保持目的,因为消歧,getter名称和返回的实际变量之间的差异)
第二个问题......
@ConstructorProperties(value="text")
对于JButton(String text),此注释的含义是什么?
似乎提供工具使用,但只是想了解。
答案 0 :(得分:20)
@ConstructorProperties
用于将构造函数参数与getter和setter方法进行匹配。为此,它依赖于为字段创建 getter 和 setter 方法时使用的相同通用命名约定。
Getter和setter方法名称通常是通过大写字段的名称并在get
或set
(或is
前面添加布尔值getter)来创建的。尽管使用单个字母的例子并不是最好的例子。
更好的示例:someValue
变为getSomeValue
因此,在构造函数属性的上下文中,@ConstructorProperties({"someValue"})
表示第一个参数与名为getSomeValue
和setSomeValue
的getter匹配。
请记住,方法参数名称在运行时不可见。这是参数'重要的顺序。构造函数参数的名称或实际设置哪些字段的构造函数并不重要。以下内容仍将引用名为getSomeValue()
的方法。
@ConstructorProperties({"someValue"})
public Point(int a) {
this.c = a;
}
此批注的用例似乎是(取消)不可变对象的序列化。框架使用对象getter获取所有值,然后序列化对象。当需要反序列化对象时,框架必须创建一个新实例。因为对象是不可变的,所以它没有任何setter。构造函数是设置这些值的唯一方法,注释用于告诉框架如何从序列化值构造序列化对象。