私はコールバックに頭を悩ませようとしてきましたが、概念を理解するのに苦労しています。次のコードは、ここで見つけた例です
最初から最後まで、フローは次のようになると理解しています。
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...
}
}
編集: 承認された回答のコメントを参照してください... ---この--- リンクは私にとって非常に役に立ちました =)