gpt4 book ai didi

java - 了解 Java 中的回调

转载 作者:行者123 更新时间:2023-12-01 18:46:08 27 4
gpt4 key购买 nike

我一直在努力理解回调,并且一直在努力理解这个概念。下面的代码是我找到的一个例子here

从头到尾我理解流程是这样的:

  • CallMe被实例化,从而调用该类的构造函数
  • 变量 en设置,随后实例化 EventNotifier类并调用它的构造函数,该构造函数传递对对象 CallMe 的引用
  • 变量 ie设置为对象CallMe它被传递到构造函数中
  • 变量 somethinghappened设置为 false(我假设将使用一些条件语句来确定是否设置该值)
  • 嗯...完成了吗?

我不明白这段代码。 doWork怎么样接到电话吗?这如何表示一个事件?为什么人们不简单地调用 interestingevent来自 callme 的构造函数....就此而言,为什么不直接调用 dowork代替任何会改变 somethinghappened 值的内容?

尽我所能,我似乎无法理解这个想法。据我所知,回调主要用于表示事件已发生,例如鼠标或按钮单击,但它如何在发生的事件和被调用的方法之间建立联系?难道不应该有一个循环来检查更改,从而触发事件吗?

有人可以提供java中回调的(不是过于简单的)解释并帮助阐明这样的东西如何有用吗?

public interface InterestingEvent
{
public void interestingEvent ();
}

public class EventNotifier
{
private InterestingEvent ie;
private boolean somethingHappened;
public EventNotifier (InterestingEvent event)
{
ie = event;
somethingHappened = false;
}

public void doWork ()
{
if (somethingHappened)
{
ie.interestingEvent ();
}
}
}

public class CallMe implements InterestingEvent
{
private EventNotifier en;
public CallMe ()
{
en = new EventNotifier (this);
}

public void interestingEvent ()
{
// Wow! Something really interesting must have occurred!
// Do something...
}
}

编辑:请参阅已批准答案中的评论... --- this --- 链接对我很有帮助 =)

最佳答案

没有 main 方法或静态 block 。您发布的代码实际上没有运行任何内容;因此,doWork() 永远不会被调用。我读了这篇文章并查看了代码,似乎不完整,或者可能遗漏了一些代码,因为作者觉得不需要解释。

要点如下:

我们有一个接口(interface)InterestingEvent、一个类EventNotifier和另一个CallMe类,它实现了InterestingEvent

EventNotifier 在其构造函数中采用 InterestingEvent,并将 somethingHappened 设置为 false

CallMe 的构造函数通过向 EventNotifier 构造函数传递对 CallMe 的引用来初始化其 EventNotifier 实例成员对象本身。

以下内容不在代码中,但如果我们检测到发生了某些特定操作,我们就会设置somethingHappened = true。因此,之后,如果为 EventNotifier 调用 doWork(),则将在该 EventNotifier 上调用 interestingEvent() > 的 InterestingEvent 即。我们可以做到这一点,因为 CallMe 实现 InterestingEvent

注意:这篇文章是 1996 年写的,自那以后发生了很多变化。您提到了如何检测鼠标单击事件,但这是不同的。我认为本文的重点是展示如何将对象与接口(interface)和 boolean 值结合使用来查看是否发生了某些情况。

要实际检测鼠标点击,请查看此 tutorial 。这是关于 Writing Event Listeners 的另一个教程。最后,既然您在评论中询问了线程,这里有一本很棒的书:Java Concurrency in Practice .

关于java - 了解 Java 中的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17758779/

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