java - 如何拥有一个接受接口的构造函数?
问题描述
我正在尝试通过一些编码挑战来学习 Java。我可以通过阅读理论来理解这些概念,但由于某种原因不能将它们应用于编码问题。
我已经编写了一个接口,现在需要在 AlertService 类中编写一个构造函数,它接受这个接口 (AlertDAO)。我真的不明白这个概念。
谁能解释一下?
我已经添加了接口并添加了一个构造函数,但不确定如何使该构造函数接受新接口?希望我说得通。
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 类使用接口而不是 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。
推荐阅读
- r - R将索引变量组合成一个向量
- r - r 用于从地址中提取英国邮政编码的正则表达式未排序
- redux - 如何使用 Redux API Middleware 和 Thunk 链接 API 请求
- vba - 字符转整数
- sql - 如何将三列的部分连接到一个新列
- ios - 如何使滚动视图在拖动时停止移动并为已经触摸的手指立即恢复移动?
- nginx - 使用 NGINX 在子目录中托管 Gatsby
- native - PWA 可以称为移动开发 App 吗?
- java - JAXB 不会生成适当的 getter 和 setter 方法。只有一个内容列表
> - php - 设置 HTML 表单时无法获取 $_POST 变量值