Quellcode generieren & formatieren

firmadankt

Mitglied
Hallo zusammen,

ich suche eine einfache Möglichkeit, Javaklassen (als Quellcode) zu generieren, und zu formatieren.

Mein konkretes Ziel ist:

Man soll bestimmte Klassen nicht direkt nutzen, sondern man soll auschließlich gegen Interfaces programmieren. Die interfaces sollen dieselben Methoden besitzen. Die Implementierung dieser Interfaces wird dann durch ein Delegate implementiert.

Also optimal für mich wäre eine API, die es mir erlaubt, Daten über vorhandene Klassen auszulesen: Namen, Rückgabewerte und Parameter von Methoden etc.

Und eigene Klassen wegzuschreiben, so dass schön formatierte Javaklassen als Quellcode am Ende entstehen.

Meine Hoffnung ist, dass ich eine API nutzen kann, die den Zugriff abstrahiert, und ich nicht alles über Reflection, bzw. über Stringoperationen implementieren muss.

Kann mir da jemand helfen?
 
Hallo zusammen,

ich suche eine einfache Möglichkeit, Javaklassen (als Quellcode) zu generieren, und zu formatieren.

Mein konkretes Ziel ist:

Man soll bestimmte Klassen nicht direkt nutzen, sondern man soll auschließlich gegen Interfaces programmieren. Die interfaces sollen dieselben Methoden besitzen. Die Implementierung dieser Interfaces wird dann durch ein Delegate implementiert.

Also optimal für mich wäre eine API, die es mir erlaubt, Daten über vorhandene Klassen auszulesen: Namen, Rückgabewerte und Parameter von Methoden etc.

Und eigene Klassen wegzuschreiben, so dass schön formatierte Javaklassen als Quellcode am Ende entstehen.

Meine Hoffnung ist, dass ich eine API nutzen kann, die den Zugriff abstrahiert, und ich nicht alles über Reflection, bzw. über Stringoperationen implementieren muss.

Kann mir da jemand helfen?

Im Endeffekt lese ich aus der Frage hinaus, dass du so etwas wie einen Stubgenerator haben moechtest, ist das so korrekt? Solche Funktionen sind eigentlich in jeder besseren IDE (Eclipse, NetBeans, IntelliJ IDEA) implementiert. Wenn du einen Stubgenerator für die Kommandozeile suchst sollte das JStubGen Projekt (selber noch nie benutzt) dein Freund sein.

Falls das nicht das war was du suchst spezifizier deine Frage nochmal.
 
Danke erstmal für die Antwort. Es kann sein, das es das ist, was ich suche.

Ich arbeite mit IntelliJ Idea, vermisse aber gerade hier diese Funktionalität. Es gibt zwar sowas, wie "Replace inheritance with delegation" und "extract interface", bzw. "use interface where possible", aber das kann ich leider nur auf einzelne Dateien, und nicht auf ganze Pakete anwenden. Aber im Prinzip wäre das so die Funktionalität, die ich Suche.
 
Ich bin etwas verwirrt. Ein Refactoring blind auf alle Klassen eines Paketes anwenden zu wollen klingt für mich nach "Ich habe einen Hammer, also muss alles ein Nagel sein". Mir ist desweiteren noch nicht ganz klar, was deine Ausgangssituation ist, und was du erreichen willst. Willst du eine API benutzen oder eine bereitstellen? Willst du bestehenden Code umbauen, der auf Vererbung aufbaut? Irgendwie ist mir das zu wolkig um konkrete Tipps geben zu können.

Grundsätzlich bin ich jedoch der Meinung, dass die Refactoringmöglichkeiten der IDEs nicht ohne Grund auf dem Level sind auf dem sie sind. D.h. weitergehende verallgemeinerte Refactorings sind in den meisten Fällen ungünstig, da ein Refactoring in vielen Fällen nicht so einfach generisch abzubilden ist und es schon verlangt, dass man selbst Hand anlegt.

Schon im einfachen Fall eines Adapters musst du irgendwie Methoden des Providedinterface auf das des Requiredinterface mappen. Woher soll eine IDE wissen, wie das Mapping passieren soll, welche Logik dafür zu implementieren ist?

Gruß
Ollie
 
Zurück