更新時間:2022-07-21 10:52:02 來源:動力節點 瀏覽2381次
與C和C++ 語言不同,Java沒有回調函數的概念。Java 不使用指針的概念,因此不支持回調函數。但是,我們可以通過傳遞引用函數位置的接口而不是傳遞函數的內存地址來創建回調函數。
Java中使用接口的回調函數的語法如下:
公共接口 接口A {
公共 字符串 callA() ;
}
Java 中的回調函數的工作方式如下:
創建一個具有單個方法 A() 的接口 X。
使用 A 作為方法參數創建方法 method1()。
在 method1() 中調用 A() 方法。
為了調用 method1(),我們傳遞 X 的實例并覆蓋 A()。
使用箭頭符號作為關鍵字新聞的替代方法,以便代碼清晰。
讓我們舉個例子,理解一個我們可以在Java中使用回調函數的場景,
例子:
我們實現了計算州稅(總稅)的稅收計算器。對于一個州,稅收可以不止一種,但對于我們的示例,假設我們只有兩種稅,即州稅和中央稅。在這兩種稅中,所有州的中央稅都相同,但各州的州稅可能不同。
static void calculateTax(stateTax() 函數的地址)
{
中央稅= 2500.0
state_tax = 根據 接口 方法 的地址獲取
total_tax = central_tax + state_tax;
}
在上面的代碼中,stateTax() 方法的地址或引用被傳遞用于計算calculateTax() 方法中的稅款總和。狀態代碼因狀態而異,因此我們將 stateTax() 方法聲明為接口中的抽象方法。
接口 狀態稅
{
雙 州稅();
}
下面是哈里亞納邦和北方邦的 stateTax() 方法的實現:
哈里亞納邦 類實現 StateTax{
公共雙 州稅(){
返回1500.0 ;
}
}
UP 類實現 StateTax{
公共雙 州稅(){
返回2500.0 ;
}
}
CallbackExample1.java
//導入需要的類和包
導入 java.util.Scanner;
//創建具有抽象方法stateTax()的接口StateTax
界面 州稅{
//聲明抽象方法
雙 州稅();
}
// 實現哈里亞納邦的 StateTax 接口
哈里亞納邦 類實施 StateTax {
公共雙重 狀態稅()
{
返回1500.0 ;
}
}
// 為 Utter Pradesh 實現 StateTax 接口
UP 類實施 StateTax {
公共雙重 狀態稅()
{
返回2500.0 ;
}
}
// 創建 CallbackExample1 來計算總稅額
類 回調示例 1 {
//main() 方法開始
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException //處理異常
{
//創建一個 Scanner 類的實例來接受用戶輸入
掃描儀 sc = new Scanner(System.in);
System.out.println( "輸入狀態名" );
//從用戶那里獲取狀態名稱
字符串狀態 = sc.next();
// 將狀態名稱存儲在對象 obj 中
類 obj = Class.forName(state);
// 創建由 StateTax 引用的 obj 類的新對象
StateTax 參考 = (StateTax)obj.newInstance();
//通過傳遞StateTax的引用調用calculateTax()方法計算總稅
計算稅(參考);
}
static void calculateTax(StateTax 數據)
{
//所有州的中央稅都相同
雙 中央稅= 3500.0 ;
// 獲取用戶輸入狀態的 state_Tax 并找到總稅
雙 state_Tax = data.stateTax();
雙 總稅 = state_Tax + central_Tax;
// 顯示結果
System.out.println( "該州的總稅額為=" +total_Tax);
}
}
輸出:
CallbackExample2.java
//為回調方法創建一個處理點擊事件的接口
接口 點擊處理程序 {
//創建抽象方法,即clickEventHandler(),它將作為回調
公共無效 點擊事件處理程序();
}
//創建一個處理回調并實現ClickHandler的類
類 處理 程序實現 ClickHandler {
//定義clickEventHandler()方法
公共無效 clickEventHandler(){
System.out.println( "按鈕正在點擊" );
}
}
//創建一個生成事件的類
類 按鈕類 {
公共無效 onClickEvent(ClickHandler obj)
{
obj.clickEventHandler();
}
}
//創建CallbackExample2類
公共類 CallbackExample2 {
//main() 方法開始
公共靜態無效 主要(字符串[]參數){
//創建一個ButtonClass對象
ButtonClass button = new ButtonClass();
//創建Handler類的對象
處理程序 hndlrObj = 新的 處理程序();
//傳遞ClickHandler的對象來執行默認操作
button.onClickEvent(hndlrObj);
//創建另一個ButtonClass對象
ButtonClass newButton = new ButtonClass();
//傳遞接口實現自己的操作
newButton.onClickEvent(新 ClickHandler(){
@覆蓋
//覆蓋在點擊時顯示輸出的clickEventHandler()
公共無效 clickEventHandler(){
System.out.println( "按鈕被點擊" );
}
});
}
}
輸出:
CallbackExample3.java
//為callback()方法創建類CallbackExample3
公共類 CallBackExample3 {
//主方法開始
公共靜態無效 主要(字符串參數[]){
//將接口名稱作為參數傳遞的函數
//創建一個方法并將接口作為參數傳遞
回調方法(新 接口X()
{
//創建callMethodX()
公共 字符串 callMethodX()
{
return "這是第一個回調" ;
}
});
// 創建一個方法并將接口作為參數傳遞
回調方法(新 接口X()
{
//創建callMethodX()
公共 字符串 callMethodX() {
return "這是第二次回調" ;
}
});
回調方法(()->
{
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();
}
}
輸出:
以上就是關于“Java回調函數的實現”介紹,大家如果想了解更多相關知識,不妨來關注一下動力節點的Java在線學習,里面的課程內容從入門到精通,細致全面,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習