PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java Object-Transformation


Slater188
2006-01-16, 11:27:03
Hallo Leute,
kennt jemand ein Framework mit dessen hilfe ich ein Java-Objekt in ein anderes umwandeln kann? Also Bsp.: Auto1 --> Auto2. Sprich die Attribute der Klasse können sich in ihren Namen oder auch Datentypen ändern...

Wäre euch recht dankbar...

Gruß
slater

HellHorse
2006-01-16, 16:40:26
Warum machst du Auto1 und Auto2 nicht einfach polymorph?

Slater188
2006-01-18, 13:27:38
Warum machst du Auto1 und Auto2 nicht einfach polymorph?
Was meinst du damit? Kannst du das erklären?

Eine andere Frage noch zusätzlich...ich habe eine Methode die einen int-Wert (einfacher Datentyp) setzt und eine die mir einen int-Wert gibt. Wie kann ich mittels Reflection den Wert aus der einen Methopde geben lassen und über die andere Methode setzen? Da muss irgendetwas zusätzliche implementiert werden oder so..weil bei normalen reflection macht er aus dem int-Wert einen Integer-Wert und versucht diesen dann zu setzen. Das erzeugt bei der set-Methode eine Fehlermeldung, logischerweise...kennt jemand eine abhilfe?

HellHorse
2006-01-18, 17:52:40
Was meinst du damit? Kannst du das erklären?
Interface Auto machen, Auto1 und Auto2 implementieren Auto. Du `programmierst gegen Auto', d.h. der statische Typ der Variablen und Argumente ist Auto. Dann spielt es keine Rolle mehr ob du ein Auto1 oder Auto2 hast.

Wie kann ich mittels Reflection den Wert aus der einen Methopde geben lassen und über die andere Methode setzen? Da muss irgendetwas zusätzliche implementiert werden oder so..weil bei normalen reflection macht er aus dem int-Wert einen Integer-Wert und versucht diesen dann zu setzen. Das erzeugt bei der set-Methode eine Fehlermeldung, logischerweise...kennt jemand eine abhilfe?
Reflection sollte sich eigentlich automatisch ums (un)boxing kümmern, auch schon vor 1.5 (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html#invoke(java.lang.Object,%20java.lang.Object[])). Wichtig ist nur, dass du nicht Integer.class sondern Integer.TYPE (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html#TYPE) verwendest.

DocEW
2006-01-18, 23:35:02
Sprich die Attribute der Klasse können sich in ihren Namen oder auch Datentypen ändern...
Ich weiß gar nicht, ob ich deine Frage verstehe...
Du hast z.B. eine Klasse Auto1 mit einem double und eine andere Klasse Auto2 mit zwei ints und einem long und willst die irgendwie ineinander "ändern"..? Wie?

Monger
2006-01-19, 08:42:22
Ich weiß gar nicht, ob ich deine Frage verstehe...
Du hast z.B. eine Klasse Auto1 mit einem double und eine andere Klasse Auto2 mit zwei ints und einem long und willst die irgendwie ineinander "ändern"..? Wie?

Das ist eine berechtigte Frage. Entweder sind zwei Datentypen miteinander "verwandt", oder eben nicht. Wenn sie keinerlei Verwandtschaft aufweisen, ist ein umwandeln von einem Typ in einen anderen ziemlich sinnlos. Man kann halt nicht automatisiert aus einem Hund einen Toaster machen. Und (da wird mir bestimmt jemand widersprechen) alle Basistypen sind in keinster Weise miteinander verwandt. Deshalb gibt es ja Hilfsklassen, um von der Umwandlung von double in int usw. zu helfen.

Entweder man stellt also künstlich ein Verwandtschaftsverhältnis her (z.B. mit einem Interface), oder man macht es per Hand, z.B. mit einem weiteren Konstruktor.

Slater188
2006-01-19, 10:49:48
Das ist eine berechtigte Frage. Entweder sind zwei Datentypen miteinander "verwandt", oder eben nicht. Wenn sie keinerlei Verwandtschaft aufweisen, ist ein umwandeln von einem Typ in einen anderen ziemlich sinnlos. Man kann halt nicht automatisiert aus einem Hund einen Toaster machen. Und (da wird mir bestimmt jemand widersprechen) alle Basistypen sind in keinster Weise miteinander verwandt. Deshalb gibt es ja Hilfsklassen, um von der Umwandlung von double in int usw. zu helfen.

Entweder man stellt also künstlich ein Verwandtschaftsverhältnis her (z.B. mit einem Interface), oder man macht es per Hand, z.B. mit einem weiteren Konstruktor.

Natürlich geht die Transformation nicht automatisch, das ist klar. Ich bin gerade dabei mir was zu überlegen wie man ein gescheites Mapping dafür anlegen kann. Sprich der Nutzer oder wer auch immer sagt, wenn der Transformer ein Objekt der Struktor X bekommt, dann soll dieses in ein Objekt der Struktur Y umgewandelt werden. Mir fehlt allerdings noch eine zündende Idee....hat jemand eine Idee ob sich schonmal irgendjemand mit dem Thema beschäftigt und etwas dazu veröffentlicht hat? Ich habe im Netz nach gesucht aber bis jetzt nur Transformationen von JDOs in XML oder Datenbanken gefunden...aber eben keine Objekt --> Objekt transformation.



@DocEW
Du hast die Frage schon richtig verstanden...

DocEW
2006-01-19, 11:19:20
Dafür brauchst du ja dann semantische Informationen über die Objekte. Das kann ja gar nicht automatisch gehen, oder? Viel besser als eine Koverterklasse mit einer Methode convert(Auto1, Auto2), wo du dann die einzelnen Attribute von Hand überträgst, wird's nicht gehen denke ich...

Slater188
2006-01-19, 11:28:59
Dafür brauchst du ja dann semantische Informationen über die Objekte. Das kann ja gar nicht automatisch gehen, oder? Viel besser als eine Koverterklasse mit einer Methode convert(Auto1, Auto2), wo du dann die einzelnen Attribute von Hand überträgst, wird's nicht gehen denke ich...
Eben genau das ist das Ziel....es soll mit einem minimal Aufwand ein Mapping erstellt werden.

bulla
2006-01-19, 14:06:58
Bin mir nicht sicher, aber vor einigen Monaten gab es hier ein ähnliches Problem, in dem jemand dynamische Objekte à la Diablo2 abbilden wollte.
Einfach mal etwas stöbern, weiss aber nicht, ob das genau dasselbe Thema behandelte und ob es zufriedenstellend gelöst werden konnte.

HellHorse
2006-01-19, 16:50:10
Du hast z.B. eine Klasse Auto1 mit einem double und eine andere Klasse Auto2 mit zwei ints und einem long und willst die irgendwie ineinander "ändern"..? Wie?
Einfach andere Accessoren schreiben? Encapsulation und so, von wegen unabhängig von der Implementierung und so.

DocEW
2006-01-20, 17:50:47
Einfach andere Accessoren schreiben? Encapsulation und so, von wegen unabhängig von der Implementierung und so.
Ja, klar, gut... aber ist irgendwie alles total händisch. Von wegen "Framework", was ja gesucht war.

Demirug
2006-01-20, 19:19:49
Das hört sich für mich wie ein Fall für die Reflektion API an.

Slater188
2006-01-23, 13:22:45
Das hört sich für mich wie ein Fall für die Reflektion API an.
Genau so sieht es aus...ich habe das WE gesessen und eine DTD entwickelt um die Transformations-Beschreibung zu ermöglichen...ich hab die hälfte auch implementiert...mal gucken...auf jedenfall danke für die Bemühungen...

Monger
2006-01-23, 15:01:27
Genau so sieht es aus...ich habe das WE gesessen und eine DTD entwickelt um die Transformations-Beschreibung zu ermöglichen...ich hab die hälfte auch implementiert...mal gucken...auf jedenfall danke für die Bemühungen...

Wenn du fertig bist, würde mich das auch mal interessieren. Du brauchst ja nicht den Quellcode rauszurücken, aber deinen Ansatz fände ich interessant.