【发布时间】:2021-04-18 07:01:48
【问题描述】:
我试图理解 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.
我的意思是调用传递对象的函数,我们需要注册它并调用函数。如果是听众,它是如何工作的?如果有人指导我理解这一点会很有帮助。
【问题讨论】:
-
您在分配点击处理程序时正在调用handleClick!执行单击时应调用 handleClick!
-
关键是
interface的使用。这描述了可能由被观察对象执行的预期功能。因此,传递实现ClickEventHandler的对象的实例意味着该对象可以调用handleClick,因为它保证了实现(干草多态!) -
@JaysmitoMukherjee 感谢分享示例。对我有很大帮助。
-
@MadProgrammer 如果我错了,请纠正。一般来说,如果我们必须在类中使用一些回调函数,那么类中应该有一些函数会调用回调函数。因此,我们需要创建一个带有回调函数名称的接口并实现它,然后我们应该将它传递给类的对象方法来注册它,然后我们调用调用回调代码的对象函数。