作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下接口(interface):
public interface NumberOfCellsListener {
public void numberOfCellsChanged(int patientId, int numOfCells);
}
public interface NumberOfCells {
public void register(NumberOfCellsListener listener);
public int numOfCells(int patientId);
}
public interface ProbabilityOfCancer {
//this may be a time consuming calculation
public double probability(int patientId, int numOfCells, bool gender, double weight);
}
这是我的癌症概率计算器的结构。我的任务是实现它,以便由于计算的耗时性质而可以异步调用它。我是 Java 新手,谁能指导我如何实现这些接口(interface)?我不确定结构,即什么去哪里。我猜我应该从 NumberOfCellsListener
实现中的 numberOfCellsChanged
方法获取新的单元格数量。但由于它是一个 void 方法,我不知道该怎么办。
最佳答案
不返回某些内容的接口(interface)方法通常具有更改内部状态或使用其他输出方式的功能(例如,将某些内容打印到控制台、通过网络发送某些内容或将其保存到数据库或文件。)。
具体接口(interface):
NumberOfCellsListener
中的 Listener
旨在与调用监听器方法的对象一起安装(“注册”),以防发生特定事件。在您的情况下,根据接口(interface)名称,我假设当某些对象的单元格数量发生变化时,会调用您的方法。因此,您面临的问题应该是,该信息(此时)要求您做什么,并在方法中执行该操作。NumberOfCells
的类应该满足上述陈述。它有一个 register
方法,该方法应该将监听器放入某种集合中(可能是 List
- 例如 ArrayList
?),然后,当某个事件发生时,调用所有列表监听器的 numberOfCellsChanged
方法。因此示例实现可以是:
public class NumberOfCellsPrinter implements NumberOfCellsListener {
public void numberOfCellsChanged(int patientId, int numOfCells) {
System.out.println("The number of cells for parentId:" + parentId + " has changed to " + numOfCells + ".");
}
}
...
public class PetriDish implements NumberOfCells {
private ArrayList<NumberOfCellsListener> listeners = new ArrayList<>();
private int numOfCells = 0;
public void register(NumberOfCellsListener listener) {
if (listener != null && !listeners.contains(listener)) {
listeners.add(listener);
}
}
public int numOfCells(int patientId) {
for (NumberOfCellsListener listener : listeners) {
listener.numberOfCellsChanged(parentId, numOfCells);
}
return numOfCells;
}
}
虽然这个例子完全没有意义,并且总是会产生 0
作为 numOfCells,但它应该演示监听器的想法。
熟悉有关并行性的风险和陷阱非常重要,因为这是实现目标的关键因素。
关于java - 异步回调和监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59044032/
我参加了一些类(class)并阅读了 YAGNI 的用途。但是,作为一个整体,这个原则从来没有让我满意。它引入了一个逻辑悖论。 作为一个假设,您正在设计一个打算向前扩展的框架。 YAGNI(可能还有
我是一名优秀的程序员,十分优秀!