2012-02-15 27 views
3

Eclipse可以做這個重構嗎?Eclipse支持重構火車殘骸

說我有,有一個列表類:

class DomainObject { 
    private List list; 
    public List getList() { return list; } 
} 

然後使用該類的一些代碼需要做到這一點:

domainObject.getList().get(23); 

我想重構這個(和有所有其他引用這樣做):

domainObject.get(23); 

我已經嘗試了幾個選項,但似乎無法找到這樣做(其它塔的方式ñ手動)

+0

爲什麼Eclipse會知道那就是你想要做的? – 2012-02-15 14:15:51

+0

好吧,說我選擇了getList()並說'內聯這個電話' – blank 2012-02-15 14:17:57

回答

7

試試這個:

  1. DomainObject正確實施List(使用list爲代表)
  2. getList()回報this
  3. 重構,內聯getList()
  4. 可選,再次刪除"implements List"保持get()方法

另一個(簡單)選項:

  1. 重構,重命名getList()getMyListWithAUniqueNameAcrossTheProject()(讓Eclipse更新所有引用)
  2. 通過""
  3. 搜索替換"getMyListWithAUniqueNameAcrossTheProject()."加入並實施DomainObject.get(int)
0

我想你想要的是重構 - >介紹indirectio n ...。我不知道如何使用它,我想你必須在List.get上調用它,指定你想在DomainObject中創建方法...

我在這裏嘗試過,但eclipse需要很多時間來計算它(尋找所有提及的方法,我猜)

編輯:我發現an article on the subject,這讓我覺得這可能不是你想要的。但是,如果Eclipse足夠聰明,它不會將該方法聲明爲static。它仍然沒有在這裏完成,但我發現Bug 187227 Introduce Indirection is extremely slow這是由於它應用的方法名稱是非常常見的事實,所以我猜這是不可用的情況下List.get ...