我是一个Java新手,我正在try 实现一个类来封装一个诊所,并使用一个队列来确定下一个要治疗的患者.

在初始化类的一个实例时,我希望将一个分诊类型参数传递给构造函数,以决定诊所将如何 Select 下一个患者(先入先出,还是基于疾病的严重性).具体地说,我希望有一个单独的queue类字段,它将是QueuePriorityQueue,具体取决于triage参数.我很难弄清楚如何声明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的方法,正确的解决方案是使用多态,声明两个Separete类,例如FIFOClinicGravityClinic,这两个类都在需要时声明队列.这些类共有的公共方法应该提取到Clinic接口.

虽然Clinic接口可以在调用公共方法的所有实例中使用,但在构造过程中必须显式引用这两个类.如果要求构造一致,即仅依赖于TriageType参数,则可以使用abstract factory pattern.

Java相关问答推荐

泽西岛:退回到不注射的客户"

在现代操作系统/硬件上按块访问数据值得吗?

如何调用Firebase Realtime Database中的子图像列表到android studio中的回收器视图?

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

在Java Swing Paint应用程序中捕获快速鼠标移动时遇到困难

CompleteableFuture是否运行在不同的内核上?

Jakarta CDI强制bean构造/注册遗留事件侦听器

Mac上的全屏截图在使用JavaFX时不能正常工作吗?

try 在Android Studio中的infoWindow中使用EditText(Java)

将ByteBuffer异步写入InputStream或Channel或类似对象

如何在Java springboot中从一个端点发送多个时间响应?

Java组件项目中的JavaFX对话框国际化

JFree Chart从图表中删除边框

IntelliJ IDEA中的JavaFX应用程序无法在资源中找到CSS文件

判断重复的两个二维表算法?

Java KeyListener不工作或被添加

如何设计包含已知和未知键值对映射的Java类?

如何通过用户ID向用户发送私信

";home/runner/work/中没有文件...匹配到[**/pom.xml];Maven项目的构建过程中出现错误

如何在JSP中从select中获取值并将其放入另一个select