首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 匿名內部類與抽象方法深度解析:ActionForward safeExecute 代碼讀解

     編輯:程式設計綜合問答

代碼結構速覽

abstract public class SafeAction extends Action {
    protected Log log = LogFactory.getLog(this.getClass());
    private static final String CONTENT_TYPE = "text/html; charset=GBK";
    private TblConTxnLog tblConTxnLog = null;
    
    // 核心關注點:這是什麼?
    abstract public ActionForward safeExecute(
        ActionMapping actionMapping,
        ActionForm actionForm,
        HttpServletRequest request,
        HttpServletResponse response
    ) throws DomainException, IOException;
    ......
}

問題 1:safeExecute 是對象還是方法?

答案:是方法聲明,具體說是「抽象方法」聲明。

  • abstract 修飾符明確表示:此方法無方法體,強制子類實現
  • public ActionForward 是返回類型,表示調用該方法後返回 ActionForward 類型的對象
  • 括號內是參數列表:4 個參數,分別類型為 ActionMapping、ActionForm、HttpServletRequest、HttpServletResponse
  • throws DomainException, IOException 聲明拋出的受檢異常

對比理解:

// 普通方法:有方法體 {}
public ActionForward execute(...) { return null; }

// 抽象方法:無方法體,以分號結束
abstract public ActionForward safeExecute(...);

問題 2:方法返回類型為什麼可以是類類型?

Java 中方法返回類型可以是任意引用類型(類、接口、數組)或基本類型。

  • ActionForward 是一個類(Struts 1 框架核心類)
  • 返回類類型 = 返回該類的實例引用
  • 這與 return "hello"(返回 String 對象)、return new User()(返回 User 對象)本質相同

子類實現時必須返回 ActionForward 實例或 null:

public class MyAction extends SafeAction {
    @Override
    public ActionForward safeExecute(ActionMapping mapping, ActionForm form,
                                     HttpServletRequest req, HttpServletResponse resp) 
            throws DomainException, IOException {
        // 業務邏輯...
        return mapping.findForward("success"); // 返回 ActionForward 實例
    }
}

匿名內部類在該場景的潛在應用

雖然代碼片段未直接展示匿名內部類,但 Struts 1 時代常見用法:

// 動態創建 Action 實例(罕見,通常配置在 struts-config.xml)
Action action = new SafeAction() {
    @Override
    public ActionForward safeExecute(ActionMapping mapping, ActionForm form,
                                     HttpServletRequest req, HttpServletResponse resp)
            throws DomainException, IOException {
        // 內聯實現邏輯
        return mapping.findForward("success");
    }
};

此時匿名內部類繼承 SafeAction 並實現抽象方法 safeExecute。

自主解決此類疑問的方法論

步驟工具/動作目標
1. 拆解語法元素 IDE 高亮、Java 語法規範 識別修飾符、返回類型、方法名、參數列表、異常聲明
2. 查找類型定義 Ctrl+點擊、Javadoc、源碼 確認 ActionForward、ActionMapping 等類的職責
3. 搜索實現類 IDE「Find Implementations」 看子類怎麼實現該方法,理解業務流程
4. 閱讀框架文檔 Struts 1 用戶指南 理解 Action 執行鏈路、ActionForward 轉發機制
5. 寫最小 Demo 驗證 新建類繼承 SafeAction 實現方法 通過編譯運行確認理解正確

擴展知識:Struts 1 Action 執行流程

RequestProcessor.process()
    → RequestProcessor.processActionPerform()
        → Action.execute() [模板方法]
            → SafeAction.execute() [最終調用 safeExecute()]
                → 子類 safeExecute() 實現

SafeAction 充當模板方法模式的中間層:在 execute() 中處理通用邏輯(日誌、編碼、事務、異常捕獲),將核心業務委託給抽象方法 safeExecute(),由具體 Action 實現。

總結

  • safeExecute 是 抽象方法聲明,返回 ActionForward 類型對象引用
  • 方法返回類類型是 Java 基礎特性,表示返回該類實例
  • 掌握「語法拆解 → 類型查找 → 實現參考 → 文檔驗證 → Demo 實踐」五步法,可獨立解決 90% 代碼閱讀疑問
  • 理解框架設計模式(模板方法、策略模式)比記憶 API 更有價值
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved