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

JBuilder 2005 重命名重構完全指南:從變量到包的全方位同步更名

     編輯:Java 相關知識

需對包、類、方法、欄位、局部變量等元素更名時,切勿使用「搜尋替換」,而應善用重構功能。專案中元素往往有眾多調用者,單純替換難以保證定義與調用同步,重構則從語義關聯層面提供同步調整保障。有了重構,「替換」功能在 JBuilder 中將大幅弱化。

一、欄位與局部變量重命名

打開 Java 文件,游標置於目標欄位/變量標識符 → Ctrl+Shift+R → Rename Field:

圖 4 更名欄位或局部變量的對話框

  • Class:所屬類
  • Old name:原名
  • New name:新名

確定 → 點擊預覽窗口應用按鈕,JBuilder 同步更新所有引用處。

屬性重命名

屬性具備 getter/setter,更名時必須同步更新存取方法。編輯器中重構無法做到,但 UML 瀏覽器支援。示例:Cat 類有屬性 age、name,欲將 name 改為 nickname。切換至 UML 視圖,右鍵 name 屬性選 Rename Property for name...:

圖 5 屬性重命名重構

對話框輸入 nickname 確定:

圖 6 屬性重命名重構對話框

JBuilder 除完成屬性定義與引用更名外,同步更新存取方法:getName() → getNickname()、setName(String) → setNickname(String),並修正所有調用處。

二、方法重命名

游標置於方法名 → Ctrl+Shift+R → Rename Method:

圖 7 方法重構對話框

提示:方法簽名如 public String cry(){...},游標必須置於方法名 cry 才能喚出對話框。

兩個關鍵選項:

  • Refactor ancestors:勾選時,若當前方法覆蓋父類方法或實現介面方法,父類/介面方法一併更改。
  • Create forwarding method:僅在未勾選上項時可用。勾選後生成相容性轉接方法。例:foo() → foo_1(),保留 foo(){foo_1();} 確保版本相容。

注意:方法重命名僅同步聲明與調用,不會 自動重命名過載方法。若有 3 個過載需執行 3 次重構。

三、方法參數變更

支援新增參數、刪除參數、調整參數順序。示例 Horse.getAccountPrice(int amount, double account):

private double getAccountPrice(int amount, double account) {
return amount * price * account;
}
public void printAccountPrice(int amount) {
double account;
if (amount <= 100) account = 1;
else if (amount <= 500) account = 0.9;
else account = 0.8;
System.out.println("總價為:" + getAccountPrice(amount, account));
}

需求:新增 price 參數,並交換 amount、account 順序。游標置於方法名 → Ctrl+Shift+R → Change Parameters of "getAccountPrice":

圖 8 方法參數重構對話框

步驟:

  1. 選中 amount 點 Move Down 移至 account 之後。
  2. 點 Add... 新增參數:

圖 9 新增參數對話框

  • Type:double
  • Name:price
  • Default value:1000.0(調用處自動填入)

確定返回主對話框,點 OK 完成。重構後代碼:

private double getAccountPrice(double account, int amount, double price) {
return amount * price * account;
}
public void printAccountPrice(int amount) {
double account;
if (amount <= 100) account = 1;
else if (amount <= 500) account = 0.9;
else account = 0.8;
System.out.println("總價為:" + getAccountPrice(account, amount, 1000.0));
}

JBuilder 掃描所有調用處,調整參數順序並以預設值填充新參數(第 17 行)。

四、類重命名

游標置於類名 → Ctrl+Shift+R → Rename Class:

圖 10 類重命名重構

將 myrefactor.Cat 改為 PersianCat,JBuilder 完成:

  • 類名 → PersianCat
  • 所有建構子名 → PersianCat
  • Java 文件名 Cat.java → PersianCat.java
  • 實例化代碼同步:Cat c = new Cat() → PersianCat c = new PersianCat()

無重構時,改類名需手動同步文件名、建構子、引用,極其繁瑣;重構讓此舉輕而易舉。

五、包重命名

手動改包名難度更大(包名須與目錄一致、包含多類、各類被多方引用)。重構一併搞定。欲將 myrefactor 改為 myrefactor_1,打開包中任一類,游標置於包名 → Ctrl+Shift+R → Rename Package(對話框同圖 11)。

確定後 JBuilder 執行:

  • 所有類的 package 声明改為 package myrefactor_1;
  • 在 <工作目錄>\src 下建立 myrefactor_1 資料夾,移動原 Java 文件。
  • 同步所有引用代碼:myrefactor.Cat → myrefactor_1.Cat

包中任一類操作均影響全包。若僅遷移單一類(如僅將 Horse 移至 myrefactor_1),可用 ErrorInsight:打開 Horse.java,游標置於類名外 → Ctrl+Shift+R → Move Class:

圖 11 對單個類進行包名更名重構

僅對 Horse.java 執行包遷移,不影響包內其他類。

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