Ich habe diese Frage. Aber es wird schwierig für mich zu erklären, da ich genaue Begriffe nicht kenne. Hoffe, jemand wird es verstehen. Ich werde versuchen, mich so gut wie möglich zu beschreiben. Ich habe das Gefühl, dass dies viel mit parsing
Sagen Sie, es gibt zwei Klassen. Und in beiden Klassen habe ich einige Variablen, z. B. Strings (der Einfachheit halber kann der Variablentyp beliebig sein), die ähnliche Namen haben .
%Vor%Nun, was ich brauche ist, ich muss den Wert der Variablenwerte einer Klasse in andere Klassen kopieren, die der entsprechenden Variable entsprechen.
%Vor%so.
Aber bitte beachten Sie, dass ich nicht die oben genannte Methode brauche. Ich hoffe, dass es eine Möglichkeit geben wird, eine einfache Methode zu schreiben, so dass sie die relevante Variable anhand des an sie übergebenen Namens identifizieren kann. Dann wird es die Wertzuweisung entsprechend tun.
Meine vorgestellte Methode ist so,
%Vor% Wenn Sie beispielsweise bb.x
an die Methode assign(...)
übergeben, wird aa.x=bb.x
zugewiesen.
Ich hoffe, das ist klar genug. Es muss einen besseren Weg geben, dies zu erklären. Wenn jemand es weiß, bitte editieren Sie den Beitrag (+ Titel), um es klarer zu machen (Aber speichern Sie meine Idee) ..
Bitte lassen Sie mich wissen, ob es einen Weg gibt, dies zu erreichen.
Danke!
Dozer ist in Ordnung, siehe Jean-Remys Antwort.
Auch wenn die Variablen Getter und Setter gemäß dem JavaBeans-Standard haben, gibt es eine Reihe von Technologien, die Ihnen helfen könnten, z. Apache Commons / BeanUtils
Beispielcode (nicht getestet):
%Vor%Aktualisierung:
Wenn Sie keine Getter und Setter haben, ist hier ein kurzer Hack, der Feldwerte von einer Klasse in eine andere kopiert, solange die Felder gemeinsame Namen und Typen haben. Ich habe es nicht getestet, aber es sollte OK als Ausgangspunkt sein:
%Vor%Aufrufsyntax:
%Vor%Bulldozer
Dozer ist ein Java Bean to Java Bean-Mapper, der rekursiv Daten von einem Objekt zum anderen kopiert. Typischerweise werden diese Java Beans von verschiedenen komplexen Typen sein.
Dozer unterstützt einfache Eigenschaftenzuordnung, komplexe Typenzuordnung, bidirektionale Zuordnung, implizite explizite Zuordnung sowie rekursive Zuordnung. Dies umfasst die Zuordnung von Auflistungsattributen, die ebenfalls auf Elementebene zugeordnet werden müssen.
Dozer können Sie Java Beans zuordnen:
Hier ein XML-Beispiel auf der Bibliotheksseite:
%Vor%Dies wird das Objekt org.dozer.vo.TestObject in TestObjectPrime abbilden und alle identischen Variablen (wie in Ihrem Fall) und die Variablen TestObjectFoo.oneFoo in TestObjectFooPrime.oneFooPrime abbilden.
Großartig, nicht wahr?
neue Antwort.
Ich würde vorschlagen, in Dover zu suchen, da es ziemlich einfach scheint.
Die zweite Option ist das Serialisieren von Klassen in XML und das Deserialisieren in die Zielklasse nur für übereinstimmende Elemente.
Die dritte Option, die ich im Kommentar erwähnt habe, war Reflektion - Ссылка
Diese Technik ermöglicht ein schönes Design-Muster namens "Introspection - Java Introspektion und Reflexion , die in Turn ermöglicht es Ihnen, Mitglieder einer bestimmten Klasse zu entdecken ...
Nachdem wir das gesagt haben, würde man einfach Member von ClassA "entdecken", eine ArrayList mit ihren Namen füllen, Member von ClassB entdecken, eine andere ArrayList mit ihren Namen füllen und Werte der überschneidenden Menge kopieren. Zumindest ist das meine Idee.