我一直在试图围绕回调包装头,并一直在努力去理解这个概念。以下代码是,我发现here了解Java中的回调
从第一开始到最后我明白的流动是这样一个例子:
CallMe
被实例化,从而调用构造的所述类- 可变
en
,随后实例化EventNotifier
类并将其称为构造函数,该构造函数通过对对象的引用CallMe
- 变量
ie
被设置为对象01这是传递到构造 - 变量设置为false(我会承担一些条件语句将被用来确定是否要设置的值,否则)
- 嗯......怎么办?
我不明白这段代码。 doWork
如何被调用?这是如何表示一个事件?为什么不会简单地从callme
的构造函数调用interestingevent
....因此,为什么不直接调用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 ---链接对我来说非常有帮助=)
那么我们如何检测事件?我们会使用一个带有循环的线程来检测发生了什么的信号吗?此外,为什么要这样做,如果你可以调用'interestingevent'方法而不是设置布尔值? –
我不认为这是一个很好的教程或任何解释,除了说明接口的一些功能...我张贴另一个链接。 Swing和AWT为你提供了[Listener classes](http://docs.oracle.com/javase/tutorial/uiswing/events/api.html) - 你不想重新创建轮子。你可以看一看特定类的源代码,看看它是如何工作的,但是,听众会在不同的线程中等待某个特定的信号。 –
所以在回调中没有其他要点,但要检测外部输入?从我收集的信息来看,最大的用途是在不同线程上运行的对象之间传递信息,我在这里是否正确? –