2012-02-17 38 views
29

如何將classA中的Java方法重構(移動)到classB中,並且對它的方法的所有引用都進行了更新?Eclipse,將java方法重構爲另一個類

這在Eclipse中受支持嗎?

+0

嗯,我不這麼認爲,至少在我的情況下引用沒有更新:( – NINCOMPOOP 2012-02-17 16:01:07

+0

我不確定我看到如何更新引用可以完成。你的方法將被類的某個地方的實例調用代碼更新在這種情況下,引用將意味着CLASSA的所有實例成爲可能有很多其他的副作用ClassB的實例。 – 2012-02-17 16:01:36

回答

21

對於靜態方法,您可以右鍵單擊並選擇「移動」。

Obj1.myMethod() 

然後將獲得「移動」到

Obj2.myMethod() 

和eclipse會解決您的進口等

對於非靜態方法,這可能不是取決於CLASSA之間的關係工作和classB。

Obj1 myobj1 = new Obj1(); 
myobj1.myMethod(); 
myobj1.myOtherMethod(); 

如果將myMethod()移動到不同的類,重構必須更改對象初始化。如果myOtherMethod沒有被移動,那麼它不能只將myobj1的類型更改爲Obj2,因爲myOtherMethod不起作用。

+0

感謝您的解釋,我現在明白了。要移動一個非靜態方法,你必須包含它必須存在於我相信的方法的參數中。 「因此,目標必須是參數或字段類型的聲明類」......不知道「或字段類型」是什麼意思。你知道嗎?這裏也是一個很好的鏈接:http://www.eclipse.org/articles/article.php?file=Article-Unleashing-the-Power-of-Refactoring/index.html – momomo 2012-02-20 15:47:43

+0

一個字段是一個類的成員變量。在Person.name中,Person是類,名稱是字段。 – Thomas 2012-02-20 15:50:07

11
  • 選擇在大綱視圖中的方法
  • 重構>移動

如果你想的方法轉移到一個新的類 - 重構>提取類

+1

所有方法這行不通。 – momomo 2012-02-20 15:48:29

+5

'提取Class'堅持提取一些成員變量到新類。如果你想移動這個方法,這是很煩人的,因爲它不依賴任何實例狀態。 – poolie 2013-05-30 07:41:37

+0

'移動'和'提取類'嚮導笨重 - 我正在使用'Luna 4.4.2'。它的工作原理是:手動創建新的課程,然後使用嚮導來移動這些方法,它只在一個時刻移動一個我,但沒關係,因爲它重構了對這些方法的所有調用。 – cbaldan 2016-08-25 14:22:30