-
千巷猫影
回调就是一种利用函数指针进行函数调用的过程. 通过回调,对象能够携带一些信息,这些信息允许它在稍后的某个时刻调用初始的对象。回调的价值在于它的灵活性,可以在运行时动态的决定需要调用什么方法。引用一段话:
使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。
java的内部类实现了回调机制,在java的GUI中到处可以看到回调的例子。
详细查看:java编程思想第10章,提到了闭包和回调。Java8引入Lambda表达式,也是使用匿名内部类实现类似回调的机制。
-
智慧大石
一个类调用另一个类中的方法,前者称为调用者(caller),后者称为被调用者(callee),调用者就是发号施令的人,被调用者就是按要求执行命令的人。
通常,调用者需要做一件事情时,就会获取或创建一个被调用者的对象,然后调用它的方法,这是一种简单明了的关系,我们很容易就理解了。
而回调是这样一个过程:调用者那里事先有一些可能需要做的事情,被调用者把自己注册到调用者那里,然后对他说:“有事叫我”,有点毛遂自荐的意思。然后当一件事情发生时,被调用者就会根据事先注册的情况调用合适的方法来处理。
例如,我们向按钮(调用者)注册了一个点击事件的处理程序(被调用者),当点击事件发生时按钮就会找到这些处理程序并调用它们。
回调特别适合于那种调用者事先不知道应该由哪些类来负责处理某件事的情况
例如,编写按钮类的人不知道别人应该怎么处理按钮的点击事件,但他又不能不给按钮添加事件,否则按钮就没法正常使用了呀,这时候他就可以通过回调来解决这件事。
-
哔哔one
Java是面向对象的,不存在回调函数这个说法。
回调函数是脚本语言之类的叫法,作为参数传递,在某个事件发生时执行的函数叫做回调函数。
function doSomething(finishCallBack){
// 做事
// 做完,调事件完成的回调函数。
finishCallBack();
}
java能把方法作为参数传递吗?不能, 但是java有很多类似的机制可以实现这种所谓的“回调”,比如匿名内部类:
public interface FinishHandler{
public void afterFinish();
}
public class SomeTask{
public void doSomething(FinishHandler handler){
// 做事
handler.afterFinish(); // "回调"
}
}
new SomeTask().doSomething(new FinishHandler(){
public void afterFinish(){
System.out.println("事情做完咯~~~")
}
});
-
白猪掌柜的
就是它让别人去处理事情,处理完后把结果告诉它