Automatisierte Schnittstellen Extrahieren aus einer Java-Klasse
Habe ich eine Sammlung von konkreten Klassen definieren eine API, und ich möchte zum extrahieren der Schnittstelle dieser Klassen (sprich: im wesentlichen die Typ-Hierarchie und der öffentliche Methoden) von der tatsächlichen Implementierung der API.
So zum Beispiel, wenn die öffentlichen Klassen in der API ist
public class Foo extends Bar {
/* some fields which I don't care about */
public void method() {
/* implementation here */
}
public void otherMethod() {
/* implementation goes here */
}
/* some non public methods which I don't care about */
}
Möchte ich brechen in ein interface und eine Implementierung
ie
public interface FooInterface extends BarInterface {
public void method();
public void otherMethod()
}
public class Foo implements FooInterface {
/* etc etc */
}
und
Gibt es ein tool ich verwenden kann, das zu tun diese Trennung in automatisierter Weise oder ich bin zu haben, um roll mein eigenes Programm für den job? Es muss ein Instrument sein, das erfordert nur minimale Interaktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich die Lösung gefunden!
Eclipse, hat die Unterstützung für refactoring-Skripte die Skripte werden im xml-noch nicht sehr Menschen freundlich, aber ich habe die generierten Skripte sowieso, das macht eclipse alle refactoring.
Details zu eclipse-refactoring-Skript, schauen Sie hier und die Verwendung von eclipse generieren Sie ein paar Beispiele für Sie, damit Sie wissen, was das Skript Aussehen sollte
Viele IDEs wie IntelliJ, haben ein "Interface Extrahieren" - Befehl führt ein refactoring für Sie: http://www.jetbrains.com/idea/features/refactoring.html#Extract_Interface
javap, ein Werkzeug des JDK, erhalten Sie die die meisten von, was Sie wollen. Jedoch, um darauf vorbereitet zu sein nicht umgehen, einige Dinge richtig - sorry, ich habe vergessen, was, vielleicht, Anmerkungen, innere Klassen, so etwas wie, dass.
Wenn die Einbettung von javap Sie in eigenen Java-app würde helfen, können Sie etwas wie das hier tun:
Dies erfordert das Sun-JDK tools.jar in den classpath.
Ich bin mir ziemlich sicher, du musst Rollen Sie Ihre eigenen Werkzeug um diese Arbeit zu tun; es ist nicht etwas, das viele Entwickler verwenden würde, und diejenigen, die verwendet haben, es würde nicht verwenden es oft. Interface extrahieren, um richtig durchgeführt werden, wirklich braucht Intelligenz (die echte Art) führt. Ein Werkzeug, die blind extrahiert alle öffentlichen & geschützte Elemente, und blind gebaut, eine interface-Hierarchie spiegeln eine Implementierung Hierarchie, ist viel smart, und das Endprodukt wäre nicht schön. Die Entwicklung der (künstliche) Intelligenz, um gute Entscheidungen darüber, was zu zählen und was die Führung zu übernehmen - das wäre ein nützliches tool, aber ich gestehe unvorstellbar schwierig für mich. Was aktuelle IDEs bieten - geführten Hilfe - ist wohl der beste Kompromiss. Kopf hoch; es ist Massiv weniger mühsam, als wenn jeder Schritt von hand!