簡體   English   中英

如何根據 Java 中的構造函數參數聲明具有不同類型的 class 字段

[英]How to declare class fields that have different types depending on the constructor parameters in Java

我是 Java 的新手,我正在嘗試實現 class 來封裝一個帶有隊列以確定下一個要治療的患者的診所。

在初始化 class 的實例時,我想將分類類型參數傳遞給構造函數,以決定診所如何將 select 下一個患者(先入先出,或基於疾病的嚴重性)。 具體來說,我想要一個queue class 字段,該字段將是QueuePriorityQueue隊列,具體取決於分類參數。 我很難弄清楚如何聲明queue字段。

public enum TriageType {
    FIFO,
    GRAVITY
}

public class Clinic {

    public TriageType triageType;

    // This code block doesn't work, but it's the kind 
    // of behavior that I want
    if (triageType == TriageType.FIFO) {
        Queue<Patient> queue = new LinkedList<>()
    }
    else {
        PriorityQueue<Patient> queue = new PriorityQueue<>()
    }

    public Clinic(TriageType _triageType) {
        this.triageType = _triageType;
    }
}

是否可以在不使用兩個不同的類的情況下做到這一點?

非常感謝。

您無法在運行時確定該字段的 static 類型。 相反,您將使用一個常見的超類型,在本例中為Queue作為類型。

如果這不符合您的需求,比如說您需要使用特定於PriorityQueue的方法,那么正確的解決方案是為此使用多態性,聲明兩個單獨的類,例如FIFOClinicGravityClinic ,它們都根據需要聲明隊列它。 這些類共有的公共方法應該被提取到Clinic接口。

雖然Clinic接口可以在調用公共方法的所有實例中使用,但在構造過程中必須顯式引用這兩個類。 如果您要求構造是統一的,即僅依賴於TriageType參數,您可以使用抽象工廠模式

暫無
暫無

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

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