Objekte kopieren

Status
Nicht offen für weitere Antworten.

SnooP

Top Contributor
Moin! Ich hab momentan das Problem, dass ich beliebige Objekte (verschiedenen Typs) kopieren möchte. Weiteres Problem ist, dass natürlich auch die Referenzen auf andere Objekte mitkopiert werden sollen (deep-copy)...

1. Möglichkeit: alle Objekte implementieren clone() - fällt eigentlich raus, weil ich dann Anforderungen an die Objekte stellen muss, was ich nicht wirklich kann.

2. Objektserialisierung von Java nutzen... dazu müssten aber wiederum die zu kopierenden Objekte serializable implementieren. Wäre natürlich vermutlich die einfachste Möglichkeit.

3. Reflections? großes Fragezeichen - hat das schonmal jemand benutzt um Objekte zu kopieren? Wie sieht das mit dem privaten Zugriff und dem Sicherheitsmanager aus? unter welchen Umständen kann man das dann nicht nutzen?
Jedenfalls finde ich die Vorbedingung einen Sicherheitsmanager zu haben, der dies zulässt durchaus interessanter, als den Usern zu erklären, dass ihre Objekte grundsätzlich serializable oder ne clone-methode haben müssen!

Wie sieht der Zugriff auf Attribute von möglichen Superklassen aus? Wie kann man auf diese zugreifen? Und letztlich die Frage - ist das ganze überhaupt sinnig, d.h. komm ich damit auf nen grünen Zweig oder gibt es Situationen wo das grundsätzlich nicht funktioniert!? Mein bisheriges Beispiel beschränkt sich auf die Kopie eines doch recht einfachen Objekts...
 

Wildcard

Top Contributor
Mal abgesehen von sinnig oder hübsch ist es schon möglich das über die Reflection-API zu realisieren.
Sofern der SecurityManager dies zulässt kannst du auch die privaten Felder eines Objektes auslesen und manipulieren.
Gleiches gilt natürlich für die Superklassen.
Wenn du also rekursiv alle Superklassen durchgehst kannst du theoretisch ein deep copy realisieren.
Dabei ist eigentlich egal ob es sich um komplexe oder einfache Objekte handelt, der benötigte Code sollte der selbe sein.
Dir muss dabei allerdings klar sein das der zugriff auf private Konstuktoren/Felder ein ziemlicher hack ist :?
 

SnooP

Top Contributor
Nunja... - wie sieht das denn mit dem Erstellen, instanzieren der Objekte aus, wenn ein parameterloser Konstruktor nur in der Vaterklasse existiert und die Subklasse nen Konstruktor mit Parameter hat? Das heißt es gibt keinen parameterlosen Konstruktor auch nicht den impliziten... wie instanziere ich dann ein solches Objekt?

Der SecurityManager ist offensichtlich so eingestellt, dass er das zulässt - und ich kann den Usern auch mitteilen, dass dieses Featurer nur dann geht. Die Idee daran ist, eine größtmögliche Menge an Objekten als Grundlage für meinen Algorithmus zuzulassen... - ich hab eine bestimmte Objektmenge mit nem bestimmten Typ, die von sich aus schon deep-copy umsetzen... nur wäre es halt optimal, um möglichst schnell und einfach Beispiele umsetzen zu könne, wenn man mit beliebigen Objekten arbeiten kann... insofern ist das evtl. nen Hack - aber ist halt wenn man genau hinschaut nen zusätzliches Feature und insofern ist da dann auch nen Hack erlaubt ;)
 

Wildcard

Top Contributor
Das Vorhandensein sein eines parameterlosen Konstruktors sollte die Mindestanforderung an entsprechende Objekte sein.
Anders wird sich das kaum lösen lassen da bei der Übergabe von null ja Exceptions auftreten könnten.
 

SnooP

Top Contributor
tja.. das ist dann natürlich eine mögliche Mindestanforderungen die ich stellen kann...

dann bleibt letztlich nur noch das Problem, wie ich es hinbekomme zyklische Objektstrukturen vernünftig zu kopieren - aber das Problem besteht ja generell bei deep-copy, dann muss ich wohl nochmal gucken... - aber damit kann ich ja jetzt schonmal was anfangen...
 

Murray

Top Contributor
Vielleicht lohnt es sich, einen Blick auf XStream zu werfen. Darin gibt es einen "enhanced mode" (der allerdings VM-spezifisch ist), mit dem man u.a. auch solche Objekte deserialisieren kann, die keinen öffentlichen Default-Konstruktor haben.
 

SnooP

Top Contributor
joah... - bei meinen Nachforschungen bin ich tatsächlich auf nen workaround gestoßen:
Code:
CUSTOMER SUBMITTED WORKAROUND :
Below is code that works on Sun's 1.4 and 1.5 JDK.

import java.lang.reflect.*;

import sun.reflect.*;

public class NoConst {

    private NoConst(){
        throw new RuntimeException("No we never want this object.");
    }

    public static void main(String[] args) throws Exception{
        Constructor oc = Object.class.getDeclaredConstructor(new Class[0]);
        ReflectionFactory factory = ReflectionFactory.getReflectionFactory();
        Class clazz = NoConst.class;
        Constructor c = factory.newConstructorForSerialization(clazz,oc);
        NoConst ncc = (NoConst) c.newInstance(null);
        System.out.println(ncc);
    }

    public String toString(){
        return "This is a NoConstructorCalled object";
    }
}
@see: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6220682

das werde ich dann gleich mal einarbeiten und testen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
L Objekte in Set nicht gefunden Allgemeine Java-Themen 13
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
MiMa Referenz auf Objekte und deren Inhalte Allgemeine Java-Themen 12
W Objekte reproduzieren Allgemeine Java-Themen 2
W Objekte per Reflexion instanziieren Allgemeine Java-Themen 7
W Unittest - Objekte simulieren Allgemeine Java-Themen 7
T OOP Objekte mit Erweiterung Initialisieren Allgemeine Java-Themen 6
O Erste Schritte Objekte als Datenelemente Allgemeine Java-Themen 14
J Equals Mock Objekte Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
F Objekte erzeugen Allgemeine Java-Themen 1
E Threads ThreadPoolExecutor remove mit callable Objekte Allgemeine Java-Themen 3
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
E OOP Objekte und Methoden Allgemeine Java-Themen 1
@SupressWarnings() Umgebungsvariable Objekte "gekoppelt" Allgemeine Java-Themen 6
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
C Objekte in Array List speichern? Allgemeine Java-Themen 1
OnDemand Objekte speichern Allgemeine Java-Themen 8
B Objekte anhand von Properties file Allgemeine Java-Themen 41
U Tiefe Objekte schreiben Allgemeine Java-Themen 1
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
F FileOutput/Input Objekte Allgemeine Java-Themen 6
OnDemand Objekte serialisieren Allgemeine Java-Themen 3
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
L Lib gesucht: Java-Objekte mit JSON Allgemeine Java-Themen 2
U Set erklären dass objekte gleich sind Allgemeine Java-Themen 12
E Best Practice Verdammt große Objekte Allgemeine Java-Themen 10
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
N 2 Objekte zu einer Gruppe zusammenfügen Allgemeine Java-Themen 7
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
H Objekte Serialisiert speichern Allgemeine Java-Themen 10
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
N Objekte aus Array Inhalt erzeugen Allgemeine Java-Themen 8
L Input/Output Textdatei in Objekte überführen? Allgemeine Java-Themen 4
R Input/Output Objekte speichern ohne überschreiben Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
M Java Objekte in XML mit JAXB Allgemeine Java-Themen 9
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
H COM-Objekte/ AktiveX Objekte Allgemeine Java-Themen 4
C Script für Website mit Objekte Ausblenden Allgemeine Java-Themen 3
M Txt einlesen & Objekte erzeugen Allgemeine Java-Themen 2
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
D Grafische Objekte zeichnen Allgemeine Java-Themen 4
A Wie zur Laufzeit auf Objekte zugreifen Allgemeine Java-Themen 7
F Referenzen auf Objekte Allgemeine Java-Themen 5
H Eclipse und Objekte Allgemeine Java-Themen 6
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
N Dynamische Objekte / DB Allgemeine Java-Themen 5
J Objekte binär speichern Allgemeine Java-Themen 10
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
V Objekte in Kategorien einteilen. Allgemeine Java-Themen 6
M 3D Objekte mit einer Linie Verbinden Allgemeine Java-Themen 3
F Wie zur Laufzeit ganz neue Objekte erzeugen? Allgemeine Java-Themen 5
A Dummy-Objekte für Webgui erzeugen Allgemeine Java-Themen 12
W Objekte speichern mit JFileChooser Allgemeine Java-Themen 8
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
L Objekte in Liste packen Allgemeine Java-Themen 2
S XML in Objekte wandeln. Euer Rat? Allgemeine Java-Themen 12
G Objekte serialisieren Allgemeine Java-Themen 2
L Parameter-Objekte verändern oder nicht? Allgemeine Java-Themen 6
D Objekte nur unter bestimmten Voraussetzungen erzeugen Allgemeine Java-Themen 4
S Objekte mit Arrays Allgemeine Java-Themen 9
F Objekte oder besser ID in Listen speichern? Allgemeine Java-Themen 2
S erzeugte objekte zählen Allgemeine Java-Themen 3
U auf Objekte mit variablem Namen zugreifen Allgemeine Java-Themen 4
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
Landei Objekte ohne Konstruktoraufruf erzeugen Allgemeine Java-Themen 7
E tiefe Kopie nicht serialisierbarer Objekte Allgemeine Java-Themen 3
J Speicherbedarf und persistente Objekte Allgemeine Java-Themen 4
J ArrayList Objekte anhand Propertywerte filtern Allgemeine Java-Themen 3
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3
J Eindeutige ID für Objekte als Keys in TreeMap Allgemeine Java-Themen 12

Ähnliche Java Themen


Oben