Copy-Constructor aufrufen - Wie ???

Status
Nicht offen für weitere Antworten.

pocketom

Bekanntes Mitglied
Kniffliges Problem:

Ich habe ein mehrstufiges Klassenmodell:

1. Die Basisklasse [c]AbstractExchangeableBusinessObject[/c] (autogenerated by JAXB, wird jedesmal überschrieben)
1.1 Die Implementation [c]ExchangeableBusinessObject extends AbstractExchangeableBusinessObject[/c], beinhaltet einen Copy-Contructor (quasi stellvertretend für AbstractExchangeableBusinessObject) welchen ich aufrufen möchte

2. Die abstrakte Klasse [c]AbstractMyClass extends ExchangeableBusinessObject[/c] (autogenerated by JAXB, wird jedesmal überschrieben), hier kann ich also keinen Copy-Constructor implementieren
2.1 Die Implementation [c]MyClass extends AbstractMyClass[/c], beinhaltet einen Copy-Constructor (stellvertretend für AbstractMyClass). Problem: Wie rufe ich nun von dieser Klasse aus den (Copy)Konstruktor von 1.1 ExchangeableBusinessObject auf ??? [c]super(myClass)[/c] ruft den (nicht vorhandenen) Copy-Construktor von AbstractMyClass, ich möchte jedoch noch eine "Ebene" tiefer...

Versucht hab ich es an dieser Stelle mit Reflection, derer ich zugegeben aber nicht all zu mächtig bin:
Mit [c]this.getClass().getSuperclass().getSuperclass().getConstructors()[0].???[/c] komme ich denke ich zumindest schonmal an den (bzw. im Beispiel einen beliebigen) Constructor ran. Nur wie übergebe ich dem jetzt das zu kopierende Objekt (quasi analog zu super(myCopyObject)) ???

Zur Ergänzung:
Die abstrakten Klassen definieren einfach nur Felder so wie sie über ein XML Schema definiert wurden. JAXB generiert aber keine Konstruktoren bzw. Copy-Constructoren, sondern nur simple Datenklassen mit Gettern/Settern. Die abstrakten Klassen werden immer wieder überschrieben sobald sich das Datenmodell des XML Schemas ändert. Hier können also keine Methoden implementiert werden. Die abstrakten Klassen können vom Developer nicht angefasst werden und sind tabu.


[EDIT] Es gibt seit kurzem eine mögliche Lösung cc-xjc. Leider läuft das Plugin bei mir derzeit noch nicht mit diesem XML Schema (crashed bei Listen). Bin also weiterhin an einer Lösung mittels Reflection o.Ä. interessiert.
 
Zuletzt bearbeitet:

Metacoder

Mitglied
Möglich, dass Du das mit Reflection hin bekommst (wobei ich Dir mangels Relfection-Know-How dabei nicht helfen kann).
Wenn Du allerdings das Design etwas änderst, sollte es auch ohne funktionieren.
Du könntest z.B. statt Vererbung (MyClass extends JAXBClass) mit Komposition arbeiten.
MyClass hat also eine Referenz auf eine JAXBClass-Instanz. Da die JAXBClass sowieso nur ein Datencontainer ist, könntest Du im CopyConstructor einfach die Referenz an das neue MyClass-Objekt übergeben.
 
S

SlaterB

Gast
wenn der Konstruktor

pulic ExchangeableBusinessObject(ExchangeableBusinessObject other) {
init(other);
}

lautet mit

protected void init(ExchangeableBusinessObject other) {
..
}

dann könnten Konstrutoren von Subklassen auch
init(other)
oder
super.init(other)
aufrufen

Methoden werden 'besser' vererbt
 

pocketom

Bekanntes Mitglied
@Metacoder
Das Design liesse sich mittlerweile nur noch mit viel Aufwand ändern. Ausserdem sind wir damit ansonsten sehr zufrieden, es erlaubt eine strikte Trennung von Datenstruktur und Methoden. In der ersten Version dieses BO-Modells wurde viel mit Komposition gearbeitet, was leider zu sehr komplexen und of unüberschaubaren Objekten führte (myObject.getOtherObject.getAnotherObject.setSomething()...). Wir schätzen mittlerweile die Restriktionen die sich automatisch durch Vererbung ergeben, so wird vorher einfach schon im Designstorming besser nachgedacht. Komposition setzen wir nur dann ein wenn sich ein Business Object auch in der Realität aus mehreren Entitäten zusammensetzt.

@SlaterB
Über die Einführung einer copy Methode haben wir auch bereits nachgedacht und beinahe schon umgesetzt.


Da wir zusammen mit dem Developer von cc-xjc noch gestern Abend die Bugs beheben konnten ist das alles nun hinfällig da die generierte Lösung die Elegantere ist und vor allem jede Menge Zeit spart.

-> cc-xjc-1.0.1dist-bin.zip :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Copy Constructor in Java ? Allgemeine Java-Themen 7
B Quellcode einer Java libary finden um zu copy & paste'n Allgemeine Java-Themen 5
llabusch Cut, Copy & Paste Symbole Allgemeine Java-Themen 2
L Deep Copy LinkedHashMap Allgemeine Java-Themen 5
H Copy Paste implementieren ausserhalb des Programms? Allgemeine Java-Themen 2
K Copy/Paste klappt nicht einwandfrei Allgemeine Java-Themen 15
E Eingabeprüfung JTextField. Fehler bei Copy-Paste Allgemeine Java-Themen 4
D java.util.ConcurrentModificationException - per Copy vermeiden Allgemeine Java-Themen 11
Daniel_L Bug in Copy-Funktion bei HTML-Editorpane? Allgemeine Java-Themen 4
P [SWT] Copy, Paste und Cut abfangen Allgemeine Java-Themen 6
X Wann ist Runtime.getRuntime().exec mit Copy fertig? Allgemeine Java-Themen 10
A copy Allgemeine Java-Themen 4
T Anti-Kommerzielle Lizenz mit Copy-Left? Allgemeine Java-Themen 58
L Copy&Paste Allgemeine Java-Themen 2
U JEditorPane & copy'n'paste Allgemeine Java-Themen 34
G Copy Allgemeine Java-Themen 2
A Zusammenfassen von zwei Dateien (wie beim DOS-Befehl copy) Allgemeine Java-Themen 6
V Objekt aus Session als copy by value bekommen Allgemeine Java-Themen 4
P Copy mit Runtime.exec() unter Unix Allgemeine Java-Themen 4
N Nochmal Clipboard. cut copy paste Allgemeine Java-Themen 2
N Struct oder Record? Und COPY in und aus Zwischenablage Allgemeine Java-Themen 2
G Deep & Shallow Copy Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
ReinerCoder Eclipse Fehlermeldung - The constructor Double(double) is deprecated Allgemeine Java-Themen 8
P Default constructor cannot handle exception type Allgemeine Java-Themen 6
M Constructor Problem Allgemeine Java-Themen 8
Kr0e Reflection - Instanz einer Klasse erstellen, ohne Default-Constructor Allgemeine Java-Themen 15
A Listener für constructor einer bestimmen Klasse Allgemeine Java-Themen 9
hdi ClassLoader / Constructor Call intern Allgemeine Java-Themen 11
E Wie Constructor mit Parametern benutzen (getConstructor) Allgemeine Java-Themen 2
G JAXB "no default constructor" Allgemeine Java-Themen 2
P sql.Date -> the constructor Date() is undefined! Allgemeine Java-Themen 3
V Vererbungsproblem --> Implicit super constructor Allgemeine Java-Themen 5
T Exception im Constructor -> null-Referenz zurückgeben Allgemeine Java-Themen 6
C jar File mehrfach aufrufen (als Windows Dienst) Allgemeine Java-Themen 5
J Aus JavaProgramm Setup Exe aufrufen Allgemeine Java-Themen 9
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
Lukasbsc JDA-Bot Webseite aufrufen Allgemeine Java-Themen 0
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L Mehrere .Jar Files aufrufen Allgemeine Java-Themen 9
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
J Überschriebene Funktion soll nicht die super Funktion aufrufen Allgemeine Java-Themen 4
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
Javafan01 Website in Java aufrufen Allgemeine Java-Themen 1
C php-Website mit Proxy aufrufen Allgemeine Java-Themen 6
L sortiertes Array im main aufrufen klappt nicht. Allgemeine Java-Themen 3
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
sandaime CMD aufrufen und aktuellen pfad ändern Allgemeine Java-Themen 11
J OpenOffice Makro aufrufen Allgemeine Java-Themen 2
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
Ananaskirsche Website mit Browser-Check aufrufen Allgemeine Java-Themen 8
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
S Überschriebene Methode der Oberklasse der Oberklasse aufrufen. Allgemeine Java-Themen 5
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
D VBScript in .jar einbinden und aufrufen Allgemeine Java-Themen 5
J Console aufrufen Allgemeine Java-Themen 1
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
A Funktionen aufrufen nach Schema x Allgemeine Java-Themen 2
B Datei innerhalb des JARs von einer statischen Methode aufrufen Allgemeine Java-Themen 4
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
D Eclipse Methode einer anderen Klasse aufrufen Allgemeine Java-Themen 14
E Aus MainActivity SubActivity aufrufen, von dort Methode in MainActivity aufrufen Allgemeine Java-Themen 3
B Benutzeroberfläche in anderer Klasse aufrufen Allgemeine Java-Themen 5
Y Applet/Html - Wie Java-Methode aufrufen, die einen Parameter erwartet? Allgemeine Java-Themen 3
K JNI: Methoden aus unterschiedlichen Threads aufrufen Allgemeine Java-Themen 3
J java-applikation-1.jar soll java-applikation-2 aufrufen.jar Allgemeine Java-Themen 5
B exe-Datei aufrufen und dort Konsoleneingaben machen Allgemeine Java-Themen 2
R Servelt mit <form action=""> aufrufen (.jsp) Allgemeine Java-Themen 7
T Methoden per String-Namen aufrufen Allgemeine Java-Themen 2
S ArrayList<Line2D> mit g2d.draw() aufrufen Allgemeine Java-Themen 27
C Mehothode in anderenm Thread aufrufen Allgemeine Java-Themen 10
C Applet per Greasemonkey aufrufen Allgemeine Java-Themen 9
E Methode schützen vor nochmaligen Aufrufen Allgemeine Java-Themen 4
C Abstrakte Klasse soll Methode aus Unterklasse aufrufen Allgemeine Java-Themen 3
R synchronized methode rekursiv aufrufen Allgemeine Java-Themen 5
X Dynamisch Konstruktor aufrufen Allgemeine Java-Themen 12
X Action in Action aufrufen Allgemeine Java-Themen 2
G super- Methode aufrufen Allgemeine Java-Themen 21
F Anderes Java-Programm aufrufen Allgemeine Java-Themen 2
S Überschriebene Methode eines generischen Typen aufrufen Allgemeine Java-Themen 4
R Exe datei aufrufen Allgemeine Java-Themen 6
T Webservice definieren und andere Webservice aufrufen Allgemeine Java-Themen 8
K Java Konstruktoren beim Initialisieren aufrufen Allgemeine Java-Themen 10
A HTML-Seite aufrufen, drucken und zum Programm zurückkehren Allgemeine Java-Themen 2
V linuxprogramm unter java aufrufen??? Allgemeine Java-Themen 4
C JTextComponent - mit Schlagwörter Funktion aufrufen Allgemeine Java-Themen 2
A monitoren von Methoden Aufrufen Allgemeine Java-Themen 3
SuperSeppel13 php-funktion aufrufen Allgemeine Java-Themen 5
thE_29 Generic Methoden die sich aufrufen wollen nicht immer Allgemeine Java-Themen 12
J Methode mit HttpClient aufrufen Allgemeine Java-Themen 5
B Linux: Bash von Java aus aufrufen Allgemeine Java-Themen 10
0 Methode von Basisklasse aufrufen Allgemeine Java-Themen 10

Ähnliche Java Themen


Oben