如何根据Java中的构造函数参数声明具有不同类型的类字段



我是Java新手,我正在尝试实现一个类,用队列封装诊所,以确定下一个要治疗的患者。

在初始化该类的实例时,我想将分诊类型参数传递给构造函数,以决定诊所将如何选择下一个患者(先入先出,或根据疾病的严重程度(。具体来说,我希望有一个单独的queue类字段,它将是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;
}
}

在不使用两个不同的类的情况下可以做到这一点吗?

非常感谢。

您无法在运行时确定字段的静态类型。相反,您将使用一个常见的超类型,在本例中为Queue作为类型。

如果这不符合您的需求,比如说,如果您需要使用特定于PriorityQueue的方法,那么正确的解决方案是为此使用多态性,声明两个独立的类,例如FIFOClinicGravityClinic,这两个类都根据需要声明队列。这些类共有的公共方法应该提取到Clinic接口中。

虽然Clinic接口可以在调用公共方法的所有实例中使用,但在构造过程中必须显式引用这两个类。如果您要求构造是统一的,即仅依赖于TriageType参数,则可以使用抽象工厂模式。

最新更新