2012-02-17 2 views
29

classAのJavaメソッドをclassBにリファクタリング(移動)し、メソッドへの参照をすべて更新するにはどうすればよいですか?Eclipse、Javaメソッドを別のクラスにリファクタリングする

これはEclipseでサポートされていますか?

+0

さて、少なくとも私の場合、参照は更新されていませんでした:( – NINCOMPOOP

+0

あなたのメソッドはclassAのインスタンスによってどこかで呼び出されますこの場合の参照を更新すると、classAのすべてのインスタンスがclassBのインスタンスになり、他の多くの副作用がある可能性があります。 –

答えて

21

、右クリックして[移動]を選択することができます。

Obj1.myMethod() 

その後、

Obj2.myMethod() 

に「移動」を取得し、非静的メソッドの場合など

インポートを修正するだろう日食う、これはクラスAとの間の関係に応じて動作しない場合がありますクラスB。

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

myMethod()を別のクラスに移動すると、リファクタリングでオブジェクトの初期化を変更する必要があります。 myOtherMethodが移動されない場合は、myOtherMethodが機能しないため、myobj1の型をObj2に変更することはできません。

+0

説明してくれてありがとう、私は今それを得る。非静的メソッドを移動するには、それが私が信じているメソッドのパラメータに存在する必要があります。したがって、ターゲットはパラメータまたはフィールドタイプの宣言クラスでなければなりません。あなたは知っていますか? – momomo

+0

フィールドはクラスのメンバー変数です。 。 'Person.name'では、Personはクラス、nameはフィールドです。 – Thomas

11
  • リファクタリング>移動アウトラインビューでメソッドを選択し
  • 新しいクラス にメソッドを移動したい場合は

- 静的メソッドでリファクタリング>抽出クラス

+1

これはすべてのメソッドでは機能しません – momomo

+5

'Extract Class'は、 – poolie

+0

'Move'と' Extract Class'のウィザードがclunkyです - 私は 'Luna 4.4.2'を使用しています。方法は私が使用しています。新しいクラスを手動で作成した後、ウィザードを使用してメソッドを移動しました。私はそれらのメソッドへのすべての呼び出しをリファクタリングするので大丈夫です。 – cbaldan

関連する問題