我一直在試圖圍繞回調包裝頭,並一直在努力去理解這個概念。以下代碼是,我發現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) - 你不想重新創建輪子。你可以看一看特定類的源代碼,看看它是如何工作的,但是,聽衆會在不同的線程中等待某個特定的信號。 –
所以在回調中沒有其他要點,但要檢測外部輸入?從我收集的信息來看,最大的用途是在不同線程上運行的對象之間傳遞信息,我在這裏是否正確? –