java介面回調和回呼函數,java回調回呼函數
開發Android已有兩年了,說來慚愧,回調雖然隨處可見,並且網上關於回呼函數和介面回調的內容很多,可一直沒弄明白,總結不明白的原因如下:
1、java的介面定義以及向上轉型是理解回調的基礎;
使用介面的核心原因:為了能夠向上轉型為多個基底類型。即利用介面的多實現,可向上轉型為多個介面基底類型。
2、匿名類。
代碼隨處可見new SthInterface()註冊介面回調。
感謝csdn兩篇文章讓我徹底理解回呼函數:
1、http://blog.csdn.net/hack_bug/article/details/7625646;
2、http://blog.csdn.net/pi9nc/article/details/23169357。
其實我很願意理解網上那個關於打電話需求協助的回呼函數例子
在此我也寫了一個與此類似的例子:
1、首先定義一個介面(即回調介面)(協助介面,可以向張三需求協助,也可以向李四需求協助,具體需要什麼協助,後期綁定自己實現。)
public interface HelperInterface {void execute();}
2、我們可以讓張三協助我們解決問題(當然找李四或者王五等)
public class HelperZhangsan implements HelperInterface{@Overridepublic void execute() {System.out.println("This is zhangsan_helper.You can also ask lisi_helper!!");}}
3、尋求協助的類,他必須持有協助的回調介面,因為找不到張三,可以找李四,只要回調介面不變,總可以找到協助的類。
public class Ask {private HelperInterface helperInterface;public void setHelperInterface(HelperInterface helperInterface){ //註冊this.helperInterface = helperInterface;}public void resultForAsk(){helperInterface.execute();}}
4、測試代碼類
public class Test {public static void main(String[] args) {Ask ask = new Ask();ask.setHelperInterface(new HelperZhangsan());ask.resultForAsk();}}
其實很多時候我們更願意如下這種寫法,也即找個匿名介面實作類別協助我們():
public class Test {public static void main(String[] args) {Ask ask = new Ask();ask.setHelperInterface(new HelperInterface() {@Overridepublic void execute() {System.out.println("hell dsc");}});ask.resultForAsk();}}
以上就是完整的回呼函數的工作機制。