【发布时间】:2015-10-28 17:19:32
【问题描述】:
Java 新手...
我有一个名称类:
private String firstName;
private String middleInitial;
private String lastName;
作为它的实例变量。
如果我有某些数据只有名字和姓氏,没有中间名,我将如何制作构造函数以便它只需要两个参数而不是三个参数?
【问题讨论】:
标签: java constructor
Java 新手...
我有一个名称类:
private String firstName;
private String middleInitial;
private String lastName;
作为它的实例变量。
如果我有某些数据只有名字和姓氏,没有中间名,我将如何制作构造函数以便它只需要两个参数而不是三个参数?
【问题讨论】:
标签: java constructor
你只需编写一个带有两个参数的构造函数和一个带有三个参数的构造函数
public YourClass(String firstName, String lastName) {
...
}
public YourClass(String firstName, String middleInitial, String lastName) {
...
}
然后调用者可以根据需要选择使用适当的构造函数。
【讨论】:
嗯,有两个选择:
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);
}
但是,编译器需要知道您从调用站点调用的是哪一个。所以你可以这样做:
new Person("Jon", "L", "Skeet");
或
new Person("Jon", "Skeet");
...但你不能这样做:
// Invalid
new Person(firstName, gotMiddleInitial ? middleInitial : ???, lastName);
并期望编译器决定使用“双名”变体。
【讨论】:
getFullName() 方法时,您会获得一些额外的支持。
在 Java 中,构造函数不能有默认参数。您唯一的选择是编写两个构造函数。幸运的是,Java 确实允许您从其他构造函数调用构造函数。你可以这样做:
public class MyClass {
private String firstName;
private String middleInitial;
private String lastName;
public MyClass(String firstName, String middleInitial, String lastName) {
this.firstName = firstName;
this.middleInitial = middleInitial;
this.lastName = lastName;
}
public MyClass(String firstName, String lastName) {
this(firstName, "", lastName);
}
...
}
【讨论】:
public Class Name{
private String first;
private String middle;
private String last;
public Name(String first, String middle, String last){
this.first = first;
this.middle = middle;
this.last = last;
}
public Name(String first, String last){
this.first = first;
this.last = last;
}
}
【讨论】:
你可以使用两个构造函数:
public Person(String firstName, String lastName)
{
this(firstName, null, lastName);
}
public Person(String firstName, String middleInitial, String lastName)
{
this.firstName = firstName;
this.middleInitial = middleInitial;
this.lastName = = lastName;
}
【讨论】:
定义2个构造函数,一个有2个参数,一个有3个参数。
【讨论】:
你可以写两个构造函数。
public Person( String firstName, String lastName, String middleName ) { ... }
public Person( String firstName, String lastName ) { ... }
【讨论】:
public void myBike(String name, String color)
{
System.out.println("My bike's name is " + name + " and is " + color + ".");
}
public void myBike(String name, String color, float height)
{
System.out.println("My bike's name is " + name + " and is " + color + ".");
System.out.println("My bike is also " + height + " inches tall.");
}
【讨论】:
建造者模式...
class Name {
Builder builder;
public String getSurname() {
return builder.surname;
}
// getter...
public Name(Builder builder) {
this.builder = builder;
}
class Builder {
String surname = "";
String middleName = "";
String name = "";
Builder surname(String surname) {
this.surname = surname;
return this;
}
Builder middleName(String middleName) {
this.middleName = middleName;
return this;
}
Builder name(String name) {
this.name = name;
return this;
}
Name build() {
return new Name(this);
}
}
}
【讨论】: