簡體   English   中英

Eclipse可以將方法轉換/重構為類嗎?

[英]Can eclipse convert/refactor a method to a class?

這似乎應該很簡單,但是我看不到任何明顯的東西。 我基本上要做的是指向方法和refactor-> extract類。 這會將有問題的方法帶到一個新類,該類作為頂級公共API。 重構還會將所有必需的方法和變量連同它一起拖到新類中,如果舊類中沒有其他東西正在使用它,則將它們從舊類中刪除。

這是重構遺留代碼時經常遇到的重復性任務。 無論如何,我目前正在使用Eclipse 3.0.2,但是如果最新版本的eclipse中提供了該答案,仍會對它感興趣。 謝謝!

我認為這種重構尚不存在。

錯誤225716已針對該功能記錄(自2008年初開始)。
錯誤312347也是這種重構的良好實現。

“創建一個新類,並將相關的字段和方法從舊類移到新類中。”

我在這個SO答案中提到了一種解決方法。

在Eclipse 3.7.1中,有一個選項可以將方法和字段移出類。 為此:

  1. 確保目標類存在(可以使用空類,只要項目中存在空類即可)。
  2. 在源類中,選擇要刪除的方法(大綱視圖對此非常有用),右鍵單擊所選內容,然后選擇“移動”。
  3. 在下拉菜單/瀏覽中選擇目標類別

您的成員現在已提取。 修復所有可見性問題(“源”>“生成Getter和Setter”對此非常有用),您已經准備就緒。

這似乎應該很簡單...

實際上,提取類是更困難的重構之一。 即使在移動單個方法及其依賴項的簡單示例中,也可能會出現復雜情況:

  1. 如果在您不知道的代碼中使用了移動的方法,則需要在原始類中有一個代理方法,該代理方法將委派給(調用)該移動的方法。 (如果您的應用程序是自包含的,或者您知道移動方法的所有客戶端,那么重構代碼可以更新調用代碼。)
  2. 如果移動的方法是接口的一部分,或者如果移動的方法是繼承的,則還需要一個“代理方法”。
  3. 您的方法可能會調用其他方法調用的私有方法/字段。 您需要為被叫成員選擇一個類(也許在使用它最多的類中)。 您需要將訪問權限從“私有”更改為更通用的訪問權限。
  4. 根據原始類和提取的類需要了解多少信息,一個或兩個都可能需要初始化指向另一個的字段。
  5. 等等。

這就是為什么我鼓勵大家投票修復bug 312347

您是否嘗試過“ Refactor組的“ Move功能? 您可以創建一個幫助器類,然后將其移到所需的任何位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM