java - 如何拥有一个接受接口(interface)的构造函数?

标签 java

我正在尝试通过一些编码挑战来学习 Java。我可以通过阅读理论来理解这些概念,但出于某种原因无法将它们应用于编码问题。

我已经编写了一个接口(interface),现在需要在 AlertService 类中编写一个接受此接口(interface) (AlertDAO) 的构造函数。我真的不明白这个概念。

谁能解释一下?

我已经添加了接口(interface)并添加了构造函数,但不确定如何让该构造函数接受新接口(interface)?希望我说的有道理。

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

class AlertService {
    private final MapAlertDAO storage = new MapAlertDAO();

    public UUID raiseAlert() {
        return this.storage.addAlert(new Date());
    }

    public Date getAlertTime(UUID id) {
        return this.storage.getAlert(id);
    }

}

interface AlertDAO {

    public UUID addAlert(Date time);
    public Date getAlert(UUID id);

}

class MapAlertDAO implements AlertDAO {
    private final Map<UUID, Date> alerts = new HashMap<UUID, Date>();

    public UUID addAlert(Date time) {
        UUID id = UUID.randomUUID();
        this.alerts.put(id, time);
        return id;
    }

    public Date getAlert(UUID id) {
        return this.alerts.get(id);
    }
}

最佳答案

AlertService 的构造函数是:

public AlertService() {
}

构造函数用于创建类的对象,如下所示:

AlertService alertService = new AlertService();

如果要将AlertDAO添加到构造函数中,它看起来像这样:

public AlertService(AlertDAO alert){
    // do something with alert
}

Java 中的构造函数是一种用于初始化对象的特殊方法。创建类的对象时调用构造函数。它可用于设置对象属性的初始值 引用:https://www.w3schools.com/java/java_constructors.asp

编辑: 如果您想让 AlertService 类使用接口(interface)而不是 MapAlertDAO,请像这样使用它:

class AlertService {
    private AlertDAO storage;

    public AlertService(AlertDAO alert) {
        this.storage = alert;
    }

    public UUID raiseAlert() {
        return this.storage.addAlert(new Date());
    }

    public Date getAlertTime(UUID id) {
        return this.storage.getAlert(id);
    }

}

现在您可以将 MapAlertDAO 传递给 AlertService。

关于java - 如何拥有一个接受接口(interface)的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55746662/

相关文章:

java - vlcj libvlc 流媒体桌面在一段时间后停止

java - 使用 HtmlUnit 在 DomNode 上调用 getByXPath

java - 如何在特定年份之前创建条件语句

java - Spring Batch MultiResourceItemReader - 仅用于组合文件?

java - GestureDetector 不适用于我的 View

java - 如何从 HttpPost 获取响应

java - 从服务器中的文本文件中获取数据到 Android 应用程序

java - Spring Boot yaml 属性作为 map 不起作用

Java getResource 路径错误

java - Spring MVC - 设置 byte[] @ResponseBody 的内容类型