2012-02-17 17 views
29

¿Cómo puedo refactorizar (mover) un método Java en clase A en clase B y tener todas las referencias al método para actualizarlo?Eclipse, refactorizando un método java en otra clase

¿Es compatible con Eclipse?

+0

Bueno, no creo que, al menos en mi caso, las referencias no se actualizaron :( – NINCOMPOOP

+0

No estoy seguro de que vea cómo se pueden actualizar las referencias. Su método sería llamado por instancias de la clase A en algún lugar del código. Actualizar las referencias en este caso implicaría que todas las instancias de classA se convierten en instancias de clase B que pueden tener muchos otros efectos secundarios. –

Respuesta

21

Para un método estático, puede hacer clic con el botón derecho y seleccionar 'Mover'.

Obj1.myMethod() 

sería entonces obtener 'movido' a

Obj2.myMethod() 

y Eclipse fijaría sus importaciones etc.

Para un método no estático, esto puede no funcionar dependiendo de la relación entre classA y clase B.

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

Si mueve myMethod() a una clase diferente, la refactorización habría que cambiar la inicialización de objetos. Si myOtherMethod no se mueve, entonces no puede simplemente cambiar el tipo de myobj1 a Obj2 porque entonces myOtherMethod no funcionará.

+0

Gracias por explicarlo, lo entiendo ahora. Para mover un método no estático, debes incluirlo para que exista en los parámetros del método que creo. "El objetivo debe ser, por lo tanto, la clase de declaración de un parámetro o tipo de campo" ... No estoy seguro de qué significa "o" tipo de campo ". ¿Tú sabes? Aquí también hay un buen enlace: http://www.eclipse.org/articles/article.php?file=Article-Unleashing-the-Power-of-Refactoring/index.html – momomo

+0

Un campo es una variable miembro de una clase . En 'Person.name', Person es la clase, name es el campo. – Thomas

11
  • Seleccione el método en la vista Esquema
  • Refactor> Mover

Si desea mover el método a una nueva clase - Refactor> Extracto de Clase

+1

Esto no funciona para todos los métodos. – momomo

+5

'Extract Class' insiste en extraer algunas variables miembro a la nueva clase Esto es molesto si quieres mover el método porque no depende de ningún estado de instancia. – poolie

+0

Los asistentes 'Move' y' Extract Class' son torpes - Estoy usando 'Luna 4.4.2'. La forma en que Conseguí que funcionara: Creé manualmente la nueva clase y luego usé el asistente para mover los métodos. Solo se mueve uno a la vez. yo, pero está bien porque refactoriza todas las llamadas a esos métodos. – cbaldan

Cuestiones relacionadas