gpt4 book ai didi

java - 如何强制我的方法接受来自外部软件的对象?

转载 作者:行者123 更新时间:2023-12-01 19:23:27 25 4
gpt4 key购买 nike

我有一个方法需要将回调对象作为参数,然后(在需要时)我的方法将调用回调对象的特定方法。

我编写了一个名为 Manager 的类,它有一个名为 addListener 的方法。作为此方法的参数,我需要使用由外部软件定义的回调对象。因此,我按以下方式定义 addListener:public void addListener(Listenerlistener)

当然,Eclipse 会提示,因为它不知道 Listener 是什么(因为 Listener 是由外部软件定义的)。关于监听器,我唯一知道(应该知道)的是它有一个名为 doSomething 的方法。因此,为了让 Eclipse 满意,我在 Manager 类之前添加了一个接口(interface):

interface Listener {
void doSomething();
}

public class CTManager {
...

问题似乎已经解决,但后来我尝试测试我的软件。因此,我创建了一个名为 test 的类。在此类中,我创建了一个 Manager 类的实例,并尝试使用该实例的 addListener 方法。

我还创建了一个类Listener,实例化它并将该实例提供给addListener。而这正是问题出现的地方。 Eclipse 写道 addListener 不适用于给定的参数。我认为这是因为它期望从我的 Listenr 接口(interface)中获取某些内容,但从 Listener 类中获取某些内容。

如何解决这个问题?

最佳答案

您正走在解决问题的正确道路上。为了让 2 个软件能够相互交互,这两个软件需要就它们之间签订的契约(Contract)达成一致。

像您描述的回调机制很常见。这里的契约是 Listener 接口(interface),您的部分使用该接口(interface)来调用回调对象上的 doSomething() 方法,而其他部分需要实现该接口(interface)才能提供有效的监听器对象。

Java 处理这些联系的方式是让类加载器声明软件一部分的接口(interface)与另一部分使用的接口(interface)兼容(或等于)。

这意味着类或接口(interface)名称必须一致,而且它们的包也必须一致。

当您构建管理器时,您还提供了合约的接口(interface)定义,如下所示:

com.your.program.manager.Listener

这意味着您必须提供文件的副本

com/your/program/manager/Listener.java

发送给构建回调对象的一方,以便他们可以导入与您的经理使用的相同的Listener定义。如果两个部分使用相同的定义,则联系人将起作用。

关于java - 如何强制我的方法接受来自外部软件的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2682429/

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