2012-02-17 10 views
29

Come posso refactoring (spostare) un metodo Java in classA in classB e avere tutti i riferimenti al metodo aggiornato?Eclipse, refactoring di un metodo java in un'altra classe

È supportato in Eclipse?

+0

Beh, io non la penso così, almeno nel mio caso i riferimenti non sono stati aggiornati :( – NINCOMPOOP

+0

Non sono sicuro di vedere come aggiornare i riferimenti potrebbe essere fatto. Il tuo metodo sarebbe chiamato da istanze di classA da qualche parte nel codice L'aggiornamento dei riferimenti in questo caso implicherebbe che tutte le istanze di classA diventino istanze di classB che potrebbero avere molti altri effetti collaterali –

risposta

21

Per un metodo statico, puoi fare clic con il tasto destro e selezionare 'Sposta'.

Obj1.myMethod() 

sarebbe quindi ottenere 'spostato' a

Obj2.myMethod() 

ed eclissi sarebbe risolvere il tuo importazioni ecc

Per un metodo non statico, questo potrebbe non funzionare a seconda del rapporto tra classA e classeB.

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

Se si sposta myMethod() per una classe diversa, il refactoring avrebbe dovuto cambiare l'inizializzazione dell'oggetto. Se myOtherMethod non viene spostato, non può semplicemente cambiare il tipo di myobj1 in Obj2 perché quindi myOtherMethod non funzionerà.

+0

Grazie per la spiegazione, ho capito ora. Per spostare un metodo non statico, devi includerlo deve esistere nei parametri del metodo in cui credo. "L'obiettivo deve quindi essere la classe dichiarante di un parametro o tipo di campo" ... Non sono sicuro cosa significa "o tipo di campo". Lo sai? Ecco anche un buon link: http://www.eclipse.org/articles/article.php?file=Article-Unleashing-the-Power-of-Refactoring/index.html – momomo

+0

Un campo è una variabile membro di una classe . In 'Person.name', Person è la classe, name è il campo. – Thomas

11
  • Selezionare il metodo in vista Struttura
  • Refactor> Sposta

Se si desidera spostare il metodo per una nuova classe - Refactor> Estratto Classe

+1

Questo non funziona per tutti i metodi – momomo

+5

'Extract Class' insiste sull'estrazione di alcune variabili membro nella nuova classe Questo è fastidioso se si desidera spostare il metodo perché non dipende da nessuno stato di istanza. – poolie

+0

Le procedure guidate di 'Move' e' Extract Class' sono goffe - sto usando 'Luna 4.4.2'. ha funzionato è stato: creato manualmente la nuova classe e poi ho usato la procedura guidata per spostare i metodi. io, ma va bene perché rifatta tutte le chiamate a quei metodi. – cbaldan

Problemi correlati