Eclipse JDT (Java Development Tools) 內建的重構引擎,讓 IDE 超越普通文字編輯器,成為現代化開發利器。善用重構,可專注業務邏輯,事後快速整理代碼結構,無需擔心破壞現有引用。本文系統梳理 15 大核心重構功能,附快捷鍵、適用場景與代碼對比,並介紹重構腳本實現庫升級自動化。
適用:變數、方法、類、包、資料夾等幾乎所有 Java 標識符。
效果:同步更新所有引用處。編輯器內聯輸入新名,按 Enter 即時生效。
適用:類跨包移動。
效果:物理移動檔案至目標包目錄,同步修正所有 import 與引用。Package Explorer 拖曳 即可觸發。
適用:簡化複雜表達式、自動推導類型。
操作:輸入表達式 → Ctrl+1 → 選項 → 自動建立帶正確類型的區域變數。
適用:將魔術數字/字串字面值提升為 static final 欄位。
效果:全類別引用同步指向常數,單點維護。
效果:將方法內區域變數提升為私有實例欄位,所有引用自動轉向。
適用:僅被呼叫一次的方法、或單行表達式拆分過度的變數。
效果:以實際值/實現體取代引用,可選同步刪除原方法/變數宣告。
範例:
// Before
TimedKey timedKey = new TimedKey(System.currentTimeMillis(), key);
return map.put(timedKey, value);
// After (Inline timedKey)
return map.put(new TimedKey(System.currentTimeMillis(), key), value);
路徑:Refactor → Convert Anonymous Class to Nested
效果:將匿名類提取為具名巢狀類,可設定存取修飾子、static/final。
範例:ThreadFactory 匿名類 → private final class MyThreadFactory implements ThreadFactory,呼叫處簡化為 new MyThreadFactory()。
路徑:Refactor → Convert Member Type to Top Level
效果:巢狀類獨立成檔。非 static 類需指定持有外部類引用的欄位名。
路徑:Refactor → Extract Interface
效果:從現有類方法生成介面,可勾選納入方法,並可選將類引用轉為介面引用。注意:僅轉換「有效引用」——若引用處使用了未納入介面的方法,該引用保持原類型。
路徑:Refactor → Extract Superclass
差異:方法實際「移動」至超類。若方法引用原類私有欄位,需同步勾選移動該欄位,否則編譯錯誤。
適用:拆解過長方法、消除重複代碼塊。
效果:自動推導參數與回傳類型,同步替換其他相同代碼塊為新方法呼叫。
範例:將 map.get 後邏輯提取為 putIfNotNull(TimedKey, Object),參數與回傳自動推導正確。
路徑:Refactor → Change Method Signature
功能:增刪參數、調整順序、變更回傳類型、拋出異常、甚至改方法名。同步修正所有呼叫處。風險:新增參數/改回傳類型可能導致編譯錯誤 (Eclipse 不知傳何值),需人工修正。

圖 1 Change Method Signature 對話框
路徑:Refactor → Infer Generic Type Arguments (Package Explorer 右鍵亦可)
適用:Java 5 前舊代碼遷移至泛型。
範例:ConcurrentHashMap map = new ConcurrentHashMap(); → ConcurrentHashMap<TimedKey, Object> map = new ConcurrentHashMap<TimedKey, Object>();
路徑:Refactor → Migrate Jars
痛點解決:傳統需 4 步 (移除舊 JAR、刪檔、複製新 JAR 改名、加入建置路徑)。
一鍵完成:選擇新 JAR 位置 → 勾選專案中需更新的 JAR → 可選 Replace Jar file contents but preserve existing filename (保留檔名不破壞建置腳本) → Finish 自動刪舊、複製新、更新建置路徑。
價值:庫發布新版本時,附贈重構腳本讓使用者一鍵升級代碼 (如類重命名、方法簽名變更)。
建立:Refactor → Create Script → 從歷史記錄勾選重構操作 → 指定輸出路徑。
套用:Refactor → Apply Script → 選擇腳本 → 預覽 → 套用。
案例:JAR v2 將 com.A 改名 com.B,發布重構腳本自動將用戶代碼中 com.A 重命名為 com.B,零成本升級。

圖 2 Create Script 視窗
熟練掌握這 15 大重構,將讓代碼品質維護從「負擔」轉為「流暢體驗」,是每位 Java 開發者的必修課。