回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作爲參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應 --摘自百度百科--
什麼是回調函數,上面的問題說的是不是很空洞,不是太形象,下面是知乎上的一位網友給的答案:
爲了有更直觀的體會,下面通過代碼來實現上述過程,
/** * @author LiosWong * @description 工具接口 * @date 2018/6/23 上午1:03 */ public interface Tools { /** * 打電話 * @param msg * @return */ String getCallMsg(String msg); } /** * @author LiosWong * @description 顧客類 * @date 2018/6/23 上午1:01 */ public class Customer implements Tools{ @Override public String getCallMsg(String msg) { if(StringUtils.isNotEmpty(msg)){ System.out.println(msg); return "已收到電話"; } return ""; } public static void main(String[] args) { Customer customer = new Customer(); SalesPerson salesPerson = new SalesPerson(); salesPerson.callCustomer("ok",customer); } } /** * @author LiosWong * @description 售貨員 * @date 2018/6/23 上午1:01 */ public class SalesPerson { public void callCustomer(String msg,Tools tools){ if("ok".equals(msg)){ String response = tools.getMsg("已經到貨啦,請前來購買~"); System.out.println(response); } } }
首先新建一個抽象工具類,裏面具體使用電話工具作爲通訊方法(回調函數),然後顧客要有電話,所以實現了這個接口;售貨員需要在有貨時通知顧客,所以需要有個通知顧客的方法callCustomer,入參數中有Tools接口的引用(登記回調函數),然後在該方法中調用Tools的方法,通知顧客已經有貨了(調用回調函數),顧客接受到電話通知(回調響應);然後在Customer類的main方法中, callCustomer方法的入參,傳入了Customer的實例.