Mapping into existing object

MoxxiManagarm

Top Contributor
Hi,

ich suche ein Framework, welches mir erlaubt Daten von einem Objekt in ein anderes bestehendes zu kopieren und zu überschreiben. Ich habe viele Mapping Frameworks gefunden, aber die scheinen mir auf dem flüchtigen Blick nur neue Objekte zu erstellen jedoch nicht das gewünschte Update zu machen. Kennt jemand ein solches Framework?

Zum Verständnis nochmal...
Ich habe ein Objekt
Java:
class MyObject {
  private Long id;
  private String name;
  private EType type;
  // getter & setter...
}
Eine Instanz dieses Objects soll mir den Werten eines anderen Objects befüllt werden
Java:
class MyUpdateObject {
  private String name;
  // getter & setter...
}

Sinngemäß:
Java:
MyObject myObj = new MyObject(1000l, "foo", EType.AWESOME);
MyUpdateObject myUObj = new MyUpdateObject("bar");
someMapper.update(myObj, myUObj );
System.out.println(myObj); //--> 1000l, "bar", EType.AWESOME

Natürlich könnte ich die Methode selbst definieren. Aber da sich die Attribute ändern können und das für mehrere Objekte eingesetzt werden soll, würde ich gerne darauf verzichten wollen, bei jeder Änderung immer wieder auch das Mapping anpassen zu müssen. Die Änderungen sollten nur die Beans selbst betreffen.

Vielen dank im Voraus
MM
 

mihe7

Top Contributor
Wenn ich @MoxxiManagarm richtig verstanden habe, dann geht es doch nur darum, Werte deklarierter Felder eines Objekts in einem anderen Objekt zu setzen. Wäre das nicht einfacher, das selbst per Reflection zu schreiben, als sich MapStruct anzutun?
 

White_Fox

Top Contributor
Ich hab das auch so verstanden, daß er Reflexion sucht.

Ich hab zwar keine Ahnung warum er das nicht über ordinäre Getter/Settermethoden macht (bzw. gehe ich bei Fremdcode davon aus, daß es seine Gründe hat, daß Membervariablen privat sind), aber seis drum.
 

thecain

Top Contributor
Ich hab das auch so verstanden, daß er Reflexion sucht.

Ich hab zwar keine Ahnung warum er das nicht über ordinäre Getter/Settermethoden macht (bzw. gehe ich bei Fremdcode davon aus, daß es seine Gründe hat, daß Membervariablen privat sind), aber seis drum.
Du hast offenbar den Sinn der Frage nicht verstanden. Es geht darum Boilerplate Code zu sparen
 

White_Fox

Top Contributor
Ich würde einen Einzeiler (mehr sind Getter/Setter ja in der Regel nicht) zwar nicht als Boilerplate Code bezeichnen, und sein letzter Absatz liest sich für mich auch nicht nach Vermeidung überflüssiger Redundanz, aber seis drum.

Und gerade wenn ich seinen Absatz noch einmal lese: Wäre ein Observermuster (bzw. dessen Implementierung) nicht sinnvoll?
 

mihe7

Top Contributor
Ich hab das auch so verstanden, daß er Reflexion sucht.
BTW: Er ist eine Sie :)

Zu MapStruct habe ich mittlerweile eine eigene Meinung (https://www.java-forum.org/thema/mapstruct-gruppierung-von-mapping.183919/). Entweder ist das Mapping so simpel, dass ich keine Lib brauche oder es ist so kompliziert, dass ich mir mit MapStruct nur zusätzliche Arbeit hole. Eine Klasse, die einfach Felder von einem Objekt in ein anderes kopiert, ist gleich geschrieben.

Und gerade wenn ich seinen Absatz noch einmal lese: Wäre ein Observermuster (bzw. dessen Implementierung) nicht sinnvoll?
Der Observer müsste ja angepasst werden. Es geht mMn einfach darum, Werte aus einem Objekt in ein anderes zu kopieren, ohne jedesmal Code schreiben oder anpassen zu müssen.
 

L0oNY

Bekanntes Mitglied
Ich wundere mich, warum der Dozermapper bisher nicht erwähnt wurde? Verstehe ich die Frage falsch oder ist die Technologie veraltet? Damit kann man auch in bestehnde Objekte reinschreiben.
 

MoxxiManagarm

Top Contributor
BTW: Er ist eine Sie :)
Ganz genau :D

Zu MapStruct habe ich mittlerweile eine eigene Meinung (https://www.java-forum.org/thema/mapstruct-gruppierung-von-mapping.183919/). Entweder ist das Mapping so simpel, dass ich keine Lib brauche oder es ist so kompliziert, dass ich mir mit MapStruct nur zusätzliche Arbeit hole. Eine Klasse, die einfach Felder von einem Objekt in ein anderes kopiert, ist gleich geschrieben.
Ich habe die letzte Woche genutzt hier ein wenig rumzuspielen und muss sagen ich bin auch kurz davor auf die Variante "ich schreib mir schnell eine Reflexion-basierte Klasse" umzusteigen. Ich kann für dieses spezielle Projekt ohne Probleme davon ausgehen, dass die Felder (und somit auch die getter/setter) sowohl in der Quelle als auch im Ziel den gleichen Namen haben. Ich danke aber allen für die Diskussion :)
 

mihe7

Top Contributor
Könnte so funktionieren:

Java:
import java.lang.reflect.*;

public class Mapper {

    private static Field findField(Class<?> clazz, Field field) {
        Class<?> c = clazz;
        do {
            for (Field f : c.getDeclaredFields()) {
                if (f.getName().equals(field.getName()) && 
                        f.getType().equals(field.getType())) {
                    return f;
                }
            }                
            c = c.getSuperclass();
        } while (c != null);
        return null;
    }

    private static void copy(Object source, Field sourceField,
            Object dest, Field destField) throws IllegalAccessException {
        if (sourceField.isSynthetic() || destField.isSynthetic() || 
                (destField.getModifiers() & Modifier.STATIC) != 0) {
            return;
        }

        boolean sourceAccessible = sourceField.isAccessible();
        boolean destAccessible = destField.isAccessible();
        sourceField.setAccessible(true);
        destField.setAccessible(true);
        try {
            destField.set(dest, sourceField.get(source));
        } finally {
            sourceField.setAccessible(sourceAccessible);
            destField.setAccessible(destAccessible);
        }
    }

    public static void update(Object source, Object dest) 
            throws IllegalAccessException {
        Class<?> sc = source.getClass();
        Class<?> dc = dest.getClass();
        for (Field sourceField : sc.getDeclaredFields()) {
            Field destField = findField(dc, sourceField);
            if (destField != null) {
                copy(source, sourceField, dest, destField);
            }
        }
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T URL Mapping Allgemeine Java-Themen 0
E Java Routing/Mapping/Teilstreckenlibrary Allgemeine Java-Themen 4
V Class Mapping - Klasse unter anderem Namen verfügbar machen Allgemeine Java-Themen 8
L O/R-Mapping Standards Allgemeine Java-Themen 3
B jxl + writing into an existing excelsheet Allgemeine Java-Themen 2
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
coolian Swing erstellt fillreckt immmer ein neues object Allgemeine Java-Themen 13
N Wo ist Object.class ? Allgemeine Java-Themen 0
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
G REST- Object darstellung Allgemeine Java-Themen 6
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
O Socket Object wird scheinbar falsch empfangen Allgemeine Java-Themen 6
N Klasse/Object Eigenaufruf Allgemeine Java-Themen 5
G JNI Shared Object Allgemeine Java-Themen 10
B Variable class in java.lang.Object Allgemeine Java-Themen 11
S Klassen Zuorgnung Object-char Allgemeine Java-Themen 2
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
M Jaxb und JPA: A cycle is detected in the object graph Allgemeine Java-Themen 5
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Datentypen Problem mit Date-Object Allgemeine Java-Themen 2
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
P Tree Object structure Allgemeine Java-Themen 19
G Object mit clone kopieren Allgemeine Java-Themen 21
J merkwürdig: Object Allgemeine Java-Themen 6
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
Iron Monkey Object in Datei effizienter lesen / schreiben Allgemeine Java-Themen 13
L Object = null? Allgemeine Java-Themen 16
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
N serialize deserialize java object über string Allgemeine Java-Themen 8
N getName() of reflection Object Allgemeine Java-Themen 4
B Probelm mit File Object Allgemeine Java-Themen 6
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
S Liste Object Löschen Allgemeine Java-Themen 7
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
M ArrayList<Object[]> und toArray() Allgemeine Java-Themen 5
Daniel_L LinkedList vom Typ Object-Array? Allgemeine Java-Themen 4
B Warum return type Object ? Allgemeine Java-Themen 4
D Generisches Object erstellen Allgemeine Java-Themen 2
M Databinding von Object zu properties-Datei Allgemeine Java-Themen 10
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
A NullPointer bei konvertierung von byteArr --> Object Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
reibi Object clonen spezial Allgemeine Java-Themen 8
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
G JSON Object auslesen Allgemeine Java-Themen 1
T cast Object to Double[] Allgemeine Java-Themen 2
G Object. Wrapper Allgemeine Java-Themen 12
V Object durchsuchen Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
T "Object o = new Object()" vs. "new Object()&q Allgemeine Java-Themen 8
T Object -> byte[] Allgemeine Java-Themen 5
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
B mit methode ein object zurückgeben. Allgemeine Java-Themen 5
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
P Typ Object in socket umwandeln Allgemeine Java-Themen 4
G Object cast via Reflection Allgemeine Java-Themen 8
Zed JList Object einfügen und Text anzeigen Allgemeine Java-Themen 3
MQue Object in Integer umwandeln Allgemeine Java-Themen 3
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
T double to object Allgemeine Java-Themen 3
S File Object zu Directory machen ? Allgemeine Java-Themen 9
V Brauche dringend Hilfe. Object-handling Allgemeine Java-Themen 4
N Warning "The Cast from Object to" Allgemeine Java-Themen 9
K Threads und ein übergeordnetes Object Allgemeine Java-Themen 7
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
W Object -> isPrimitiv? Allgemeine Java-Themen 7
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
S Object nach Integer umwandeln Allgemeine Java-Themen 13
R object zu array casten. Allgemeine Java-Themen 2
N Map Object Allgemeine Java-Themen 13
G Eine C/C++ Referenz in einem Java Object speichern Allgemeine Java-Themen 5
N Ermitteln welchen Typ ein "Object"-Objekt enthält Allgemeine Java-Themen 11
K Cast ohne neues Object zu erzeugen Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben