我一直在努力解决回调问题,并且一直在努力掌握这个概念。以下代码是我在此处找到的示例
从头到尾我理解流程是这样的:
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...
}
}
编辑:请查看已批准答案中的评论...---这个---链接对我很有帮助=)