我正在阅读这个用Java创建不可变类的页面,并决定修改我正在编写的页面上列出的规范.
final String personfirstname;
final String personlastname;
final int personAge;
public Person(String firstname, String lastname) {
this.personfirstname = firstname;
this.personlastname = lastname;
}
public Person(String firstname, String lastname, int personAge){
this(firstname,lastname);
this.personAge = personAge;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,eclipse说personAge可能没有设置,尽管我在第二个构造函数中这样做.是不是可以在java中创建一个带有两个构造函数的不可变类?如果有可能我该怎么办?
我最接近的是:
final private String personfirstname;
final private String personlastname;
final private int personAge;
public Person(String firstname, String lastname) {
this.personfirstname = firstname;
this.personlastname = lastname;
//Set a default age
this.personAge = 0;
}
public Person(String firstname, String lastname, int age){
this.personfirstname = firstname;
this.personlastname = lastname;
this.personAge=age;
}
Run Code Online (Sandbox Code Playgroud)
我提供了一个默认年龄,但我的构造函数没有链接,这可以吗?如果没有,我将如何在不可变类中提供两个构造函数?
用户可以调用第一个没有设置的构造函数personAge.该final变量必须由构造年底明确赋值,而事实并非如此.
通过调用另一个构造函数中的构造函数来切换personfirstname和personlastname在一个构造函数中的赋值this.这样,第一个构造函数委托第二个构造函数执行所有操作,包括设置年龄.
public Person(String firstname, String lastname) {
// or another reasonable default value for age
this(firstname, lastname, 0);
}
public Person(String firstname, String lastname, int personAge){
this.personfirstname = firstname;
this.personlastname = lastname;
this.personAge = personAge;
}
Run Code Online (Sandbox Code Playgroud)
构造函数保持链接,因此不会复制任何代码.所有字段都一起分配,并且在调用任何构造函数的末尾都明确赋值.
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |