簡體   English   中英

Java 構造函數 - 子類構造函數中的可選參數

[英]Java constructor - optional argument in a subclass constructor

這里的整個系統是一種圖書館。 我有一個名為Person的超類,有兩個構造函數:一個接受名字和姓氏作為單獨的字符串,另一個接受這些參數以及中間名的 ArrayList - 這個想法是有些人沒有中間名。 在一個名為Member的子類中,我希望通過傳遞一個空的 ArrayList 來選擇創建一個有或沒有中間名的成員 object。 我的第一個想法是這樣的:

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

但是我現在意識到super()構造函數必須是子類構造函數中的第一個語句。 希望您能看到我在這里嘗試做的事情 - 有沒有一種好方法可以做到這一點,而無需在成員 class 中編寫兩個構造函數? 有幾行代碼我不想重復。

您可以通過 static 工廠方法而不是構造函數來構造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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM