Java回调函数

Java中的回调函数

"if you call me, i will call back"

/**
 * /codeone/CallBack.java
 * author: iamaprin
 * date: 2015/11/30
 * time: 23:16
 * description: test how the callback working.
 *              code from futeng @ http://www.zhihu.com/question/19801131
 */
package codeone;

interface DoHomeWork {
    void doHomeWork(String question, String answer);
}

class RoomMate {
    public void getAnswer(String homework, DoHomeWork someone) {
        if ("1+1=?".equals(homework)) {
            someone.doHomeWork(homework, "2");
        } else {
            someone.doHomeWork(homework, "don't know");
        }
    }
}

class Worker implements DoHomeWork {
    @Override
    public void doHomeWork(String question, String answer) {
        System.out.println("exercise book");
        System.out.println("homework: " + question + " answer: " + answer);
    }
}

public class CallBack {
    public static void main(String[] args) {
        Worker worker = new Worker();
        String question = "1+1=?";
        new RoomMate().getAnswer(question, worker);
    }
}

这个例子取自知乎上的回答,意思是一位worker让其室友帮忙完成工作。其中worker知道工作的内容但不想做,而其室友知道该怎么做却不知道做什么,这其中有个信息交换的过程。

getAnswer() => "if you call me"
doHomeWork() => "i will call you back

  1. 这其中有个委托机制,我委托你做一件我自己不能完成的事情,但是对于这件事情你需要在我这获得更多的信息。
  2. 被委托者也需要执行委托者中的方法,所以在调用的过程中委托者需要将自己引用传递给被委托者。
  3. 在多线程中,可以实现异步回调。


```java 著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:刘云龙 链接:http://www.zhihu.com/question/19801131/answer/17158216 来源:知乎

public class Button {
private OnClickLisener onClickLisener;

public interface OnClickLisener {
	public void onClick();
}

public void setOnClickLisener(OnClickLisener onClickLisener) {
	this.onClickLisener = onClickLisener;
}

public void onClick() {
	onClickLisener.onClick();
}

}

public class Main implements Button.OnClickLisener {

public static void main(String args[]) {
	Button button = new Button();
	button.setOnClickLisener(new Main());
	button.onClick();
}

@Override
public void onClick() {
	System.out.println("点击,回调");
}

}

在这个例子中,Main执行Button的onClick()方法,然后Button执行了Main的onClick()方法。Main也将自己的引用传递给了Button,然后Button在从引用调用Main的方法。

----------
<br>
```Javascript
$("p").hide(1000,function(){
alert("The paragraph is now hidden");
});

这是JQuery的一段代码,同样用到了回调机制,实现的效果是p中文字先消失,再弹出对话框。这个例子中function方法的引用被传递给了hide方法。



*刚开始接触回调,待修改,有问题欢迎指正*

相关资料出处:
futeng,刘云龙 @ 回调函数(callback)是什么?--知乎

jQuery Callback 函数--w3school

posted @ 2015-12-01 00:59  iamaprin  阅读(189)  评论(0编辑  收藏  举报