2010-11-01 7 views
7

Das muss möglich sein, aber ich kann es in Eclipse einfach nicht herausfinden. Ich habeKlasse in Eclipse extrahieren

/** ClassA.java */ 
class A { 
    ... 
} 

class B { 
    ... 
} 

und ich möchte Klasse B wählen und zu seiner eigenen Datei zu extrahieren, so dass ich bekommen:

/** ClassA.java */ 
class A { 
    ... 
} 

und

/** ClassB.java */ 
class B { 
    ... 
} 

Wie mache ich dies in Finsternis?

Antwort

11

So funktioniert es (funktioniert in Eclipse 3.5):

  1. Wählen Sie Ihren Code zu extrahieren:

    /** ClassB.java */ 
    class B { 
        ... 
    } 
    
  2. Cut

  3. Rechtsklick auf das Paket, in dem Sie es

  4. Wählen Sie Paste setzen wollen. (Dann Organisieren Importe, wenn nötig.)

+2

Großartig! Vielen Dank! Es klappt! – Ztyx

+0

Ich mag das, es vermeidet, die Datei erstellen zu müssen. Seltsam, dass Eclipse so inkonsistent ist, wenn die Importe korrekt kopiert werden. Wenn Sie manuell in die Datei einfügen, werden alle Importe folgen. Hier werden sie nicht kopiert. –

+0

Ich schlug die Cut-Paste-Option vor, aber ich wusste nicht, Schritt 3 und 4. Danke dafür .... –

1

Wenn es keine spezifische Funktion ist, dann die neue Klasse zu erstellen, kopieren und den Inhalt von B einfügen und dann CTRL schlagen - SHIFT - O auf beiden Dateien (oder zumindest A.java) zu reinigen bis die Importe sollten es tun.

Es ist nicht sehr häufig zu fragen, und es ist ziemlich einfach manuell zu tun.

Bearbeiten: Sie können auch B.java erstellen und dann Refactoring-> Move on B in Ihrem A.java verwenden, um es nach B.java zu verschieben. Es schien jedoch nicht die Importe zu kopieren, als ich das tat, während ich beim manuellen Kopieren und Einfügen die Importe automatisch ergriff.

+0

Ich hat versucht, bewege B-Klasse aus A aber das hat nie funktioniert, also habe ich es aus meiner Lösung gestrichen. –

1

Es gibt keine Funktionen, die ich kenne. Sie müssen eine Java-Datei Ihrer Wahl erstellen und die Klasse in der neuen Datei ausschneiden und einfügen. Korrigieren Sie die Import- und Paketdeklarationsnamen (falls erforderlich).


EDIT Der beste Weg, es zu tun: Einfach eine leeren Datei B.java, erstellen, um A.java, markiert B.java und die rechte Maustaste und wählen Sie Refactor -> Move (Alt+Shift+V kurz) zurück. Es wird die Klasse B nach B.java verschieben.

Ich habe getestet und es funktioniert. Möglicherweise müssen Sie Importe ggf. verwalten.

+0

Das ist lustig. Auch wenn es ziemlich einfach ist, würden Sie denken, dass es eine Abkürzung dafür gibt. Scheint wie eine gemeinsame Operation. – Ztyx

+1

Es ist * eine übliche Operation. Daher unterstützt IDEA es seit Ewigkeiten. – Mot

6

In meinem Eclipse-(3.6 - Helios SR1), markierte ich die Typnamen (B) und dann für das Popup-Menü der rechte Maustaste und dann Refactor>Move Type to New File ... wählen.

Edit: Es wurde in früheren verions 'Convert Member auf oberster Stufe' genannt, sondern wurde aktualisiert mit mehr als nur Elementtypen zu arbeiten:

http://download.eclipse.org/eclipse/downloads/drops/R-3.6-201006080911/eclipse-news-part2.html

verschieben Typ neu Refactoring von Dateien.

Der Typ Convert Mitglied auf Top Level Refactoring wurde Typ Neue Datei zu verschieben umbenannt und nun kann jeder sekundären Typ in einer Datei in eine eigene Datei verschoben werden. Die Aktion funktioniert weiterhin für Elementtypen.

+1

Hmm, ich frage mich, welches Plugin das bietet. Ich habe diese Option in meiner Lagerinstallation nicht. –

+0

Das ist lustig - ich habe diese Option nicht. Welche Version von Eclipse hast du? – Ztyx

+0

Es heißt, dass in 3.6, hatte es zuvor einen anderen Namen. –

0

Position der Cursor irgendwo in der Klasse B (vielleicht ist es in dem Klassennamen sein muss). Wählen Sie Refactor -> Move type to new File.

(. Das ist der Aktionsname in Eclipse 3.6 Ich glaube, es in früheren Versionen war Move member type to top level)

Referenz:

Verwandte Themen