나는 콜백에 대한 내 머리를 감싸고 있으며 개념을 파악하는 데 어려움을 겪고있다. 다음 코드는 내가어야 흐름을 이해하고 처음부터 끝까지 시작 hereJava의 콜백 이해
을 발견 한 예이다 : 상기
CallMe
따라서 생성자를 호출 인스턴스화 클래스- 변수
en
가 설정되고,이어서EventNotifier
클래스를 인스턴스화하고 객체에 대한 참조가 전달되는 생성자를 호출합니다.CallMe
- 변수
ie
이 객체 01로 설정됩니다. 생성자 - 변수
somethinghappened
에 전달했다는 false로 설정되어 - 은 음, 어디 ... 다 (I 일부 조건문이 다른 값을 설정할지 여부를 결정하는 데 사용되는 가정 것)?
이 코드를 이해할 수 없습니다. doWork
은 어떻게 호출 되나요? 이것이 사건을 어떻게 의미합니까? 왜 callme
의 생성자에서 interestingevent
을 호출하지 않는 것이 좋을까요 ... 그 이유에 대해서는 somethinghappened
의 값을 변경하는 대신에 dowork
을 호출하는 것이 좋을까요?
시도해보십시오. 아이디어를 파악하지 못하는 것 같습니다. 콜백은 주로 마우스 나 버튼 클릭과 같은 이벤트가 발생했음을 나타 내기 위해 사용되지만, 발생하는 이벤트와 호출되는 메서드 사이의 연결을 어떻게 만드는지 이해합니다. 변경 사항을 확인하는 루프가 없으므로 이벤트가 트리거되어야합니까?
누군가가 자바에서 콜백에 대한 설명을 제공해 주시고 어떻게 유용하게 사용할 수 있습니까?
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)를 제공합니다. 휠을 다시 만들고 싶지는 않습니다. 특정 클래스에 대한 소스 코드를 살펴봄으로써 실제로 작동하는 방법을 볼 수 있지만, 특정 수신기를 기다리는 다른 스레드에있을 것입니다. –
콜백에는 다른 점이 없지만 외부 입력을 감지 할 수 있습니까? 내가 수집 한 것에서 가장 큰 용도는 별도의 스레드에서 실행되는 객체간에 정보를 전달하는 것입니다. –