回調函數簡單點說就是:A調用B中的方法,B方法執行結束後,再調用A中的方法,而該方法就是回調函數。
下面舉個例子,該例子的主要思想是:A打電話給B,叫B幫忙買東西,B會給A回電話東西是否買到了。
接口類:Callback.java
package lifeixu.com.callback;
public interface Callback {
//回調函數,A調用B的方法,B開始執行,B執行結束後,調用A的方法,是以該方法由A來實作
public void bCALLa(String result);
}
A.java
public class A implements Callback {
private B b;
public A(B li) {
this.b = li;
}
//A打電話叫B幫忙買東西
public void buyByCall(String something) {
System.out.println("A--->A要買的東西是: "+something);
new Thread(new Runnable(){
@Override
public void run() {
//***1.A調用B的函數,将A要買的東西傳給B,并注冊回調函數
b.buySomething(A.this, something);
}
}).start();
play();
}
public void play() {
System.out.println("A--->A邊看電視邊等B電話");
}
@Override
public void bCALLa(String result) {
System.out.println("A--->A等到B的電話,結果是:"+result);
}
}
B.java
public class B {
private String result = "東西沒有買到";
public void buySomething(Callback callback, String something) {
//***2.B執行自己的方法
result = shoping(something);
//***3.等待B執行結束後,B調用A的函數,B打電話給A東西買好了
callback.bCALLa(result);
}
public String shoping(String something){
System.out.println("B--->B要幫A買的東西是:"+something);
System.out.println("B--->B開始幫A買:"+something);
//模拟B買東西,花費一定的時間
for(int i=;i<;i++) {
}
System.out.println("B--->B幫A買好了:"+something);
result = something+"買到了";
return result;
}
}
測試類:Test.java
public class Test {
public static void main(String[] args) {
testAB();
}
public static void testAB() {
B b = new B();
A a = new A(b);
a.buyByCall("蘋果");
}
}
測試結果:
A--->A要買的東西是: 蘋果
A--->A邊看電視邊等B電話
B--->B要幫A買的東西是:蘋果
B--->B開始幫A買:蘋果
B--->B幫A買好了:蘋果
A--->A等到B的電話,結果是:蘋果買到了
再附加個簡單的callback例子:
接口類:CallbackInterface.java
public interface CallbackInterface {
public void callback();
}
MethodTime.java
public class MethodTime {
private CallbackInterface callbackInterface;
public MethodTime(CallbackInterface callbackInterface) {
this.callbackInterface = callbackInterface;
}
public void methodTime() {
long start = System.currentTimeMillis();
System.out.println("start time: " + start);
callbackInterface.callback();//需要計算時間的方法
long end = System.currentTimeMillis();
System.out.println("end time: " + end);
System.out.println("use time: " + (end - start));
}
}
測試類:Test.java
public class Test {
public static void main(String[] args) {
testMethodTime();
}
public static void testMethodTime() {
MethodTime mt = new MethodTime(new CallbackInterface() {
@Override
public void callback() {
for(int i=;i<;i++) {
}
}
});
mt.methodTime();
}
}