java构造函数-子类构造函数中的可选参数

i7uq4tfw  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(468)

这里的整个系统是一种图书馆。我有一个超类叫做 Person ,具有两个构造函数:一个构造函数将名字和姓氏作为单独的字符串,另一个构造函数将这些参数作为中间名的arraylist—其思想是有些人没有中间名。在一个叫做 Member ,我想通过传递一个空的arraylist来创建一个成员对象,该对象可以有中间名,也可以没有中间名。我的第一个想法是这样的:

if (middleNames.size() == 0) {
    super(firstName, lastName);
} else {
    super(firstName, middleNames, lastName);
}

但我现在意识到 super() 构造函数必须是子类构造函数中的第一个语句。希望您能看到我在这里要做的事情—有没有一种不在成员类中编写两个构造函数的好方法?有几行代码我不想重复。

3okqufwl

3okqufwl1#

你可以构造 Member 通过静态工厂方法而不是构造函数创建示例。

class Member extends Person {
    static Member create(String firstName, List<String> middleNames, String lastName) {
        if (middleNames.isEmpty()) {
            return new Member(firstName, lastName);
        }
        return new Member(firstName, middleNames, lastName);
    }

    private Member(String firstName, String lastName) {
        super(firstName, lastName);
    }

    private Member(String firstName, List<String> middleNames, String lastName) {
        super(firstName, middleNames, lastName);
    }
}

相关问题