>Java >java지도 시간 >Java 구현 콜백 코드 예

Java 구현 콜백 코드 예

高洛峰
高洛峰원래의
2017-01-24 13:30:251292검색

JAVA 콜백 구현

MS-Windows 및 X Windows 이벤트 기반 디자인 패턴에 익숙한 개발자는 일반적으로 이벤트 소스에 메서드 포인터를 전달하고 이벤트가 발생할 때 이를 호출합니다. 메서드("콜백"이라고도 함). Java의 객체지향 모델은 현재 메소드 포인터를 지원하지 않으며 이러한 편리한 메커니즘을 사용할 수 없는 것 같습니다.

Java는 인터페이스를 지원하며, 인터페이스를 통해서도 동일한 콜백을 구현할 수 있습니다. 비결은 간단한 인터페이스를 정의하고 콜백하려는 메서드를 선언하는 것입니다.

예를 들어, 특정 이벤트가 발생할 때 알림을 받는다고 가정하면 인터페이스를 정의할 수 있습니다.

public interface InterestingEvent {
 // 这只是一个普通的方法,可以接收参数、也可以返回值
 public void interestingEvent();
}

이러한 방식으로 다음을 구현하는 모든 클래스가 있습니다. 이 인터페이스는 객체의 핸들 그립입니다.

이벤트가 발생하면 InterestingEvent 인터페이스를 구현한 객체에 알려야 하며, InterestingEvent() 메소드를 호출해야 합니다.

class EventNotifier {
 private InterestingEvent ie;
 private boolean somethingHappened;
 
 public EventNotifier(InterestingEvent event) {
  ie = event;
  somethingHappened = false;
  }
public void doWork() {<br>        if (somethingHappened) {<br>            // 事件发生时,通过调用接口的这个方法来通知<br>            ie.interestingEvent();<br>        }        <br>    }<br>}

이 예에서는 SomethingHappened를 사용하여 이벤트 발생 여부를 표시합니다.

이벤트 알림을 수신하려는 클래스는 InterestingEvent 인터페이스를 구현하고 이벤트 알림자에 대한 자체 참조를 전달해야 합니다.

public class CallMe implements InterestingEvent {
 private EventNotifier en;
 
 public CallMe() {
  // 新建一个事件通知者对象,并把自己传递给它
  en = new EventNotifier(this);
 }
 
 // 实现事件发生时,实际处理事件的方法
 public void interestingEvent() {
  // 这个事件发生了,进行处理
 }
}

위는 Java에서 콜백 구현을 설명하는 매우 간단한 예입니다.

물론 이벤트 관리나 이벤트 알리미 클래스 등록을 통해 이 이벤트에 관심 있는 여러 개체를 등록할 수도 있습니다.

1. InterestingEvent 인터페이스를 정의하면 ninterestingEvent(String event) 콜백 메소드가 단순히 String 매개변수를 받습니다.

interface InterestingEvent {
 public void interestingEvent(String event);
}

2. InterestingEvent 인터페이스, 이벤트 처리 클래스

class CallMe implements InterestingEvent {
 private String name;
 public CallMe(String name){
  this.name = name;
 }
 public void interestingEvent(String event) {
  System.out.println(name + ":[" +event + "] happened");
 }
}

3. by

class EventNotifier {
 private List<CallMe> callMes = new ArrayList<CallMe>();
  
 public void regist(CallMe callMe){
  callMes.add(callMe);
 }
  
 public void doWork(){
  for(CallMe callMe: callMes) {
   callMe.interestingEvent("sample event");
  }
 }
}

4. 테스트

public class CallMeTest {
 public static void main(String[] args) {
  EventNotifier ren = new EventNotifier();
  CallMe a = new CallMe("CallMe A");
  CallMe b = new CallMe("CallMe B");
 
  // regiest
  ren.regist(a);
  ren.regist(b);
   
  // test
  ren.doWork(); 
 }
}

위는 Java에 대한 소개입니다. 콜백 메커니즘이 필요한 학생들은 이를 참조할 수 있습니다.

Java 구현 콜백 코드 예제와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.