2010-01-22 26 views
28

Estoy teniendo problemas para encontrar la opción correcta para perfeccionar por el siguiente escenario:¿Cómo refactorizar una clase interna estática a una clase de nivel superior en Eclipse?

tengo código como este (en Outer.java):

public class Outer { 

    // ... class stuff 

    public static class Inner { 
     // ... inner class stuff 
    } 
} 

Busco una forma de seleccionar interior, y se ha convertido a una clase de nivel superior, en su propio archivo fuente .java. Sé que esto es bastante fácil de hacer manualmente con copiar/pegar, etc., pero se hace referencia a la clase interna en muchos lugares, y me gustaría que la opción de refactorización maneje el cambio en todos los sitios a los que se hace referencia.

He intentado la opción Refactor -> Extract Class... pero eso hace algo extraño con un campo llamado data que no entiendo del todo.

La versión de Eclipse es 3.5.1 Galileo.

¿Cómo puedo refactorizar una clase interna estática para que sea una clase de nivel superior?


Editar: No puedo creer, pasé por alto la opción de hacer esto. Gracias por todas sus respuestas correctas, +1 a todos ustedes. Todavía necesitaré aceptar una respuesta, así que si hay más información útil, p. problemas con el guión, todavía hay un propósito para dejar una respuesta.

Respuesta

42

Esto es tan fácil No puedo creer que me lo perdí:

Con el cursor en cualquier lugar dentro del tipo interno, clic derecho y seleccionar:
Refactor -> Convert Member Type to Top Level...

(no hay acceso directo en el valor por defecto configuración)

Esto extrae automáticamente el tipo interno y lo coloca en su propio archivo, en el mismo paquete y directorio que el tipo externo.

actualización

En versiones posteriores de esta refactorización de Eclipse ha pasado a denominarse "mover el texto en archivo nuevo"

+10

Parece que en el Helios liberar la funcionalidad ha sido renombrado a "mover el texto en archivo nuevo ...". – ArtB

+1

Y asegúrese de seleccionar solo la clase/interfaz, no todo su contenido, también. – xamde

+3

¡Puede ser fácil, pero lo encontré leyendo esta respuesta! – reinierpost

2

tengo 3.4.1, y si yo haga clic derecho en interior,> refactor, Tengo la opción "Tipo de miembro encubierto al nivel superior ...", que hace exactamente lo que quiere.

2

Uso Refactor -> Convertir miembros a nivel superior Tipo

3

Extracto de clase no es lo que quiere.

que acabo de hacer esto usando Eclipse 3.4.2

  1. SELECT interna
  2. clic derecho 'Refactor-> Convertir Tipo de miembro Para nivel superior ...'
2

Para completar, la versión 4.x de Eclipse ha cambiado la terminología y ahora que llamar a esa operación como Move Type to New File...

Move type to new file

Cuestiones relacionadas