2010-01-22 13 views
28

Je ne parviens pas à trouver l'option refactor correcte pour le scénario suivant:Comment refactoriser une classe interne statique en une classe de niveau supérieur dans Eclipse?

J'ai le code comme ceci (en Outer.java):

public class Outer { 

    // ... class stuff 

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

Je cherche un moyen de sélectionner intérieure, et avoir converti en une classe de premier niveau, dans son propre fichier source .java. Je sais que c'est assez facile à faire manuellement avec copier/coller etc., mais la classe interne est référencée dans beaucoup d'endroits, et je voudrais que l'option refactor gère le changement partout où il est référencé.

J'ai essayé l'option Refactor -> Extract Class... mais cela fait quelque chose de bizarre avec un champ appelé data que je ne comprends pas très bien.

La version d'Eclipse est 3.5.1 Galileo.

Comment refactoriser une classe interne statique pour qu'elle soit une classe de niveau supérieur?


Éditer: Je ne peux pas croire que j'ai ignoré l'option de le faire. Merci pour toutes vos bonnes réponses, +1 à vous tous. J'aurai toujours besoin d'accepter une réponse, donc s'il y a d'autres informations utiles, par ex. gotchas avec le script, il y a toujours un but de laisser une réponse.

Répondre

42

Cela est si facile, je ne peux pas croire que je manqué:

Avec le curseur partout dans le type intérieur, clic droit et sélectionnez:
Refactor -> Convert Member Type to Top Level...

(Il n'y a pas de raccourci dans la valeur par défaut paramètres)

Ceci extrait automatiquement le type interne, et le place dans son propre fichier, dans le même paquet et répertoire que le type externe.

Mise à jour

Dans les versions ultérieures d'Eclipse ce refactoring a été renommé « Déplacer type au nouveau fichier »

+10

Il semble que dans le Helios libérer la fonctionnalité a été renommé « Déplacer type au nouveau fichier ... ». – ArtB

+1

Et assurez-vous de sélectionner uniquement la classe/interface, pas tout son contenu, aussi. – xamde

+3

C'est peut-être facile, mais je l'ai trouvé en lisant cette réponse! – reinierpost

2

Je 3.4.1, et si je clic droit sur intérieur,> refactoring, J'ai l'option "Covert member Type to top level ..", qui fait exactement ce que vous voulez.

2

Utilisez Refactor -> Convertir membres Haut Niveau Type

3

Extrait de classe n'est pas ce que vous voulez.

Je viens de faire cela en utilisant Eclipse 3.4.2

  1. Sélectionnez Inner
  2. un clic droit 'Refactor-> Convert Type de membre au haut niveau' ...
2

Pour être complet, la version 4.x d'Eclipse a changé la terminologie et maintenant ils appellent cette opération comme Move Type to New File...

Move type to new file