min*_*ins 17 java constructor annotations
关于 @ConstructorProperties
文档说"构造函数上的注释,显示该构造函数的参数如何与构造对象的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;
Run Code Online (Sandbox Code Playgroud)
}
(我编辑了代码,因为从答案来看,我理解注释要求代码遵循getter的常见情况约定,例如cc
getter必须getCc()
.但我保持目的,为了消除歧义,getter name和实际变量之间的区别返回)
第二个问题......
@ConstructorProperties(value="text")
Run Code Online (Sandbox Code Playgroud)
对于JButton(String text),这个注释意味着什么?
似乎提供了工具使用,但只是想了解.
kap*_*pex 30
@ConstructorProperties
用于将构造函数参数与getter和setter方法进行匹配.为此,它依赖于为字段创建getter和setter方法时使用的相同通用命名约定.
Getter和setter方法名称通常通过大写字段的名称和前置get
或set
(或is
对于布尔getter)来创建.尽管如此,使用单个字母的示例并不是最好的.
一个更好的例子:someValue
成为getSomeValue
因此,在构造函数性质的情况下,setSomeValue
意味着第一个参数与名为干将匹配@ConstructorProperties({"someValue"})
和getSomeValue
.
请记住,方法参数名称在运行时不可见.这是参数的顺序.构造函数参数的名称或实际设置的构造函数与哪些字段无关.以下仍将引用一个名为的方法setSomeValue
.
@ConstructorProperties({"someValue"})
public Point(int a) {
this.c = a;
}
Run Code Online (Sandbox Code Playgroud)
这个注释的用例似乎是(de-)不可变对象的序列化.框架使用对象getter获取所有值,然后序列化对象.当需要反序列化对象时,框架必须创建一个新实例.因为对象是不可变的,所以它没有任何setter.构造函数是设置这些值的唯一方法,注释用于告诉框架如何从序列化值构造序列化对象.
归档时间: |
|
查看次数: |
8479 次 |
最近记录: |