如果有2个参数,如何制作接收2的构造函数,如果有3个参数,则制作3个

igg*_*012 4 java constructor

Java新手......

我有一个名字类:

private String firstName;
private String middleInitial;
private String lastName;
Run Code Online (Sandbox Code Playgroud)

作为其实例变量.

如果我有某些只有firstName和lastName的数据,没有middleInitial,我怎样才能使构造函数只使用2个参数而不是3个?

mat*_*t b 10

您只需编写一个包含两个参数的构造函数和一个包含三个参数的构造函数

public YourClass(String firstName, String lastName) {
   ...
}

public YourClass(String firstName, String middleInitial, String lastName) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后,调用者可以根据需要选择使用适当的构造函数.


Jon*_*eet 8

那么,有两个选择:

  • 只需要一个带有三个参数的构造函数,并使用null或空字符串调用它 middleInitial
  • 重载构造函数,可能从另一个调用一个.

作为后者的示例,使用空字符串作为默认的中间首字母:

public Person(String firstName, String middleInitial, String lastName)
{
    this.firstName = firstName;
    this.middleInitial = middleInitial;
    this.lastName = lastName;
}


public Person(String firstName, String lastName)
{
    this(firstName, "", lastName);
}
Run Code Online (Sandbox Code Playgroud)

然而,编译器将需要知道你在哪一个调用从调用点.所以你可以这样做:

new Person("Jon", "L", "Skeet");
Run Code Online (Sandbox Code Playgroud)

要么

new Person("Jon", "Skeet");
Run Code Online (Sandbox Code Playgroud)

......但你做不到:

// Invalid
new Person(firstName, gotMiddleInitial ? middleInitial : ???, lastName);
Run Code Online (Sandbox Code Playgroud)

并期望编译器决定使用"两个名称"变体.

  • +1用于建议2参数构造函数调用3参数构造函数. (2认同)