首页 > 解决方案 > 回调代码执行

问题描述

我试图理解 Java 中的回调,但这让我很困惑。我知道回调是通过实现接口作为对象传递的。但我无法理解如何调用参数中传递的那些对象的函数。我举了这个例子

interface ClickEventHandler {
    public void handleClick();
}
//Step 2: Create a callback handler
//implementing the above interface
class ClickHandler implements ClickEventHandler {
    public void handleClick() {
      System.out.println("Clicked");
    }
}

//Step 3: Create event generator class
class Button {
    public void onClick(ClickEventHandler clickHandler) {
      clickHandler.handleClick();
    }
}

public class Tester {
    public static void main(String[] args) {
        Button button = new Button();
        ClickHandler clickHandler = new ClickHandler();
        //pass the clickHandler to do the default operation
        button.onClick(clickHandler);

        Button button1 = new Button();
        //pass the interface to implement own operation
        button1.onClick(new ClickEventHandler() {
            @Override
            public void handleClick() {
                System.out.println("Button Clicked");
            }
        });
    }
}

Output is 
```none
Clicked Button
Clicked.

我的意思是调用传递对象的函数,我们需要注册它并调用函数。如果是听众,它是如何工作的?如果有人指导我理解这一点会很有帮助。

标签: javacallback

解决方案


好吧,您通常会维护一个引用ClickEventHandler(如果您想支持多个,甚至是一个列表)并在单击按钮时调用该方法。

例子:

class Button {
  private ClickEventHandler clickHandler;

  public void onClick(ClickEventHandler clickHandler) {
    this.clickHandler = clickHandler;
  }

  public void click() {
     if( clickHandler != null ) {
       clickHandler.handleClick();
     }
  }

现在,当您调用onClick()侦听器时,它只会被注册,并且只会在单击按钮时执行(即您调用该click()方法)。


推荐阅读