更新時間:2022-07-21 10:52:02 來源:動力節(jié)點 瀏覽2898次
與C和C++ 語言不同,Java沒有回調(diào)函數(shù)的概念。Java 不使用指針的概念,因此不支持回調(diào)函數(shù)。但是,我們可以通過傳遞引用函數(shù)位置的接口而不是傳遞函數(shù)的內(nèi)存地址來創(chuàng)建回調(diào)函數(shù)。
Java中使用接口的回調(diào)函數(shù)的語法如下:
公共接口 接口A {
公共 字符串 callA() ;
}
Java 中的回調(diào)函數(shù)的工作方式如下:
創(chuàng)建一個具有單個方法 A() 的接口 X。
使用 A 作為方法參數(shù)創(chuàng)建方法 method1()。
在 method1() 中調(diào)用 A() 方法。
為了調(diào)用 method1(),我們傳遞 X 的實例并覆蓋 A()。
使用箭頭符號作為關(guān)鍵字新聞的替代方法,以便代碼清晰。
讓我們舉個例子,理解一個我們可以在Java中使用回調(diào)函數(shù)的場景,
例子:
我們實現(xiàn)了計算州稅(總稅)的稅收計算器。對于一個州,稅收可以不止一種,但對于我們的示例,假設(shè)我們只有兩種稅,即州稅和中央稅。在這兩種稅中,所有州的中央稅都相同,但各州的州稅可能不同。
static void calculateTax(stateTax() 函數(shù)的地址)
{
中央稅= 2500.0
state_tax = 根據(jù) 接口 方法 的地址獲取
total_tax = central_tax + state_tax;
}
在上面的代碼中,stateTax() 方法的地址或引用被傳遞用于計算calculateTax() 方法中的稅款總和。狀態(tài)代碼因狀態(tài)而異,因此我們將 stateTax() 方法聲明為接口中的抽象方法。
接口 狀態(tài)稅
{
雙 州稅();
}
下面是哈里亞納邦和北方邦的 stateTax() 方法的實現(xiàn):
哈里亞納邦 類實現(xiàn) StateTax{
公共雙 州稅(){
返回1500.0 ;
}
}
UP 類實現(xiàn) StateTax{
公共雙 州稅(){
返回2500.0 ;
}
}
CallbackExample1.java
//導入需要的類和包
導入 java.util.Scanner;
//創(chuàng)建具有抽象方法stateTax()的接口StateTax
界面 州稅{
//聲明抽象方法
雙 州稅();
}
// 實現(xiàn)哈里亞納邦的 StateTax 接口
哈里亞納邦 類實施 StateTax {
公共雙重 狀態(tài)稅()
{
返回1500.0 ;
}
}
// 為 Utter Pradesh 實現(xiàn) StateTax 接口
UP 類實施 StateTax {
公共雙重 狀態(tài)稅()
{
返回2500.0 ;
}
}
// 創(chuàng)建 CallbackExample1 來計算總稅額
類 回調(diào)示例 1 {
//main() 方法開始
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException //處理異常
{
//創(chuàng)建一個 Scanner 類的實例來接受用戶輸入
掃描儀 sc = new Scanner(System.in);
System.out.println( "輸入狀態(tài)名" );
//從用戶那里獲取狀態(tài)名稱
字符串狀態(tài) = sc.next();
// 將狀態(tài)名稱存儲在對象 obj 中
類 obj = Class.forName(state);
// 創(chuàng)建由 StateTax 引用的 obj 類的新對象
StateTax 參考 = (StateTax)obj.newInstance();
//通過傳遞StateTax的引用調(diào)用calculateTax()方法計算總稅
計算稅(參考);
}
static void calculateTax(StateTax 數(shù)據(jù))
{
//所有州的中央稅都相同
雙 中央稅= 3500.0 ;
// 獲取用戶輸入狀態(tài)的 state_Tax 并找到總稅
雙 state_Tax = data.stateTax();
雙 總稅 = state_Tax + central_Tax;
// 顯示結(jié)果
System.out.println( "該州的總稅額為=" +total_Tax);
}
}
輸出:

CallbackExample2.java
//為回調(diào)方法創(chuàng)建一個處理點擊事件的接口
接口 點擊處理程序 {
//創(chuàng)建抽象方法,即clickEventHandler(),它將作為回調(diào)
公共無效 點擊事件處理程序();
}
//創(chuàng)建一個處理回調(diào)并實現(xiàn)ClickHandler的類
類 處理 程序?qū)崿F(xiàn) ClickHandler {
//定義clickEventHandler()方法
公共無效 clickEventHandler(){
System.out.println( "按鈕正在點擊" );
}
}
//創(chuàng)建一個生成事件的類
類 按鈕類 {
公共無效 onClickEvent(ClickHandler obj)
{
obj.clickEventHandler();
}
}
//創(chuàng)建CallbackExample2類
公共類 CallbackExample2 {
//main() 方法開始
公共靜態(tài)無效 主要(字符串[]參數(shù)){
//創(chuàng)建一個ButtonClass對象
ButtonClass button = new ButtonClass();
//創(chuàng)建Handler類的對象
處理程序 hndlrObj = 新的 處理程序();
//傳遞ClickHandler的對象來執(zhí)行默認操作
button.onClickEvent(hndlrObj);
//創(chuàng)建另一個ButtonClass對象
ButtonClass newButton = new ButtonClass();
//傳遞接口實現(xiàn)自己的操作
newButton.onClickEvent(新 ClickHandler(){
@覆蓋
//覆蓋在點擊時顯示輸出的clickEventHandler()
公共無效 clickEventHandler(){
System.out.println( "按鈕被點擊" );
}
});
}
}
輸出:

CallbackExample3.java
//為callback()方法創(chuàng)建類CallbackExample3
公共類 CallBackExample3 {
//主方法開始
公共靜態(tài)無效 主要(字符串參數(shù)[]){
//將接口名稱作為參數(shù)傳遞的函數(shù)
//創(chuàng)建一個方法并將接口作為參數(shù)傳遞
回調(diào)方法(新 接口X()
{
//創(chuàng)建callMethodX()
公共 字符串 callMethodX()
{
return "這是第一個回調(diào)" ;
}
});
// 創(chuàng)建一個方法并將接口作為參數(shù)傳遞
回調(diào)方法(新 接口X()
{
//創(chuàng)建callMethodX()
公共 字符串 callMethodX() {
return "這是第二次回調(diào)" ;
}
});
回調(diào)方法(()->
{
return "It is the third callback";
});
}
//define callbackMethod()
public static void callbackMethod(interfaceX obj)
{
//print callback messages
System.out.println(obj.callMethodX());
}
//create an interface
public interface interfaceX {
public String callMethodX();
}
}
輸出:

以上就是關(guān)于“Java回調(diào)函數(shù)的實現(xiàn)”介紹,大家如果想了解更多相關(guān)知識,不妨來關(guān)注一下動力節(jié)點的Java在線學習,里面的課程內(nèi)容從入門到精通,細致全面,很適合沒有基礎(chǔ)的小伙伴學習,希望對大家能夠有所幫助。