使用多个构造函数创建不可变类

3 java immutability

我正在阅读这个用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)

我提供了一个默认年龄,我的构造函数没有链接,这可以吗?如果没有,我将如何在不可变类中提供两个构造函数?

rge*_*man 5

用户可以调用第一个没有设置的构造函数personAge.该final变量必须由构造年底明确赋值,而事实并非如此.

通过调用另一个构造函数中的构造函数来切换personfirstnamepersonlastname在一个构造函数中的赋值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)

构造函数保持链接,因此不会复制任何代码.所有字段都一起分配,并且在调用任何构造函数的末尾都明确赋值.