首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JBuilder 2005 類內部提煉重構:方法、變量與內聯操作全攻略

     編輯:Java 相關知識

一、提煉方法

針對龐大方法體,可使用 Extract Method 將部分代碼提煉為小方法並在原處插入調用。若存在重複代碼段,提煉為獨立方法更利於復用。

操作:選中目標代碼塊 → Ctrl+Shift+R → Extract Method。JBuilder 會分析選中塊引用的上下文變量,自動生成對應參數並傳遞。

示例:Horse.java 中的 printQuotation() 方法:

public void printQuotation(int amount) {
printBanner();
System.out.println("單價:" + price);
System.out.println("購買只數:" + amount);
System.out.println("總價:" + (price * amount));
}

選中第 4-6 行 → 提煉為 printDetail():

圖 12 提煉方法對話框

輸入方法名 printDetail 確定後,生成代碼:

public void printQuotation(int amount) {
printBanner();
printDetail(amount); // 原處插入調用
}

// 提煉出的新方法
private void printDetail(int amount) {
System.out.println("單價:" + price);
System.out.println("購買只數:" + amount);
System.out.println("總價:" + (price * amount));
}

新方法參數 amount 用於傳遞上下文變量,調用處自動傳入。

二、內聯方法

內聯方法是提煉的反操作:以方法體替換調用。若方法為 private 且無其他調用處,內聯後將刪除該方法。

示例:游標置於 printDetail() 調用處 → Ctrl+Shift+R → Inline Method,代碼還原為提煉前狀態。適用於系統中存在過多委托層導致關係難以理解時,移除無用委托方法。

三、提煉變量

方法中多次出現相同表達式時,可提煉為局部變量。示例:

public void printAccountPrice(int amount) {
if (amount <= 100) {
System.out.println("總價:" + (amount * price));
} else if (amount <= 500) {
System.out.println("總價(打9折):" + (amount * price) * 0.9);
} else {
System.out.println("總價(打9折):" + (amount * price) * 0.9);
}
}

amount * price 出現 3 次。游標選中該表達式 → Ctrl+Shift+R → Introduce Variable:

圖 13 引入變量對話框

  • Name:totalPrice
  • Type:自動推斷不可變
  • Expression:選中的表達式
  • Include all read expressions:勾選後全域替換同一方法內所有重複表達式

重構後:

public void printAccountPrice(int amount) {
double totalPrice = (amount * price);
if (amount <= 100) {
System.out.println("總價:" + totalPrice);
} else if (amount <= 500) {
System.out.println("總價(打9折):" + totalPrice * 0.9);
} else {
System.out.println("總價(打9折):" + totalPrice * 0.9);
}
}

複雜表達式(如 n*Math.PI*r*r*h/3*price)應按語義拆分為多個變量(體積、總價)以提升可讀性。

四、內聯變量

內聯變量是提煉變量的逆操作。兩種方式:

  1. 游標置於變量定義處內聯 → 所有引用被替換,定義語句刪除。
  2. 游標置於引用處內聯 → 可選「僅當前位置」或「所有引用處」。

演示第二種:游標置於第 5 行 totalPrice → Ctrl+Shift+R → Inline Variable:

圖 14 內聯變量對話框

  • Variable:要內聯的變量
  • Expression:內聯表達式
  • Replace all occurrences:是否替換所有引用

確定後代碼還原為提煉前狀態。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved