gpt4 book ai didi

java - 异步回调和监听器

转载 作者:行者123 更新时间:2023-12-01 19:55:41 24 4
gpt4 key购买 nike

我有以下接口(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com