2 Objekte der selben Klasse zusammenfügen und alte Referenz

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
2 Objekte der selben Klasse zusammenfügen und alte Referenz behalten....

Folgendes:

Habe die Klasse Auto mit getFarbe() setFarbe() und getKennzeichen() setKennzeichen()
Also ganz simpel.

Habe jetzt in meiner Anwendung im Laufe des Programms eine Objektstruktur erzeugt in der die obige Klasse drin ist.

Nun bekomme ich während des Programmlaufs ein neues Objekt vom Typ Auto.

Muss nun folgendes machen: Die Eigenschaften vom neuen Objekt Auto im alten Objekt Auto überschreiben. Das alte Auto Objekt muss vorhanden bleiben. Also autoAlt = autoNeu geht nicht, da die Referenz dann verloren gehen würde, welche ich z.B. in einem Vector gespeichert haben könnte.

Folgendes geht aber:
autoAlt.setFarbe(autoNeu.getFarbe());
autoAlt.setKennzeichen(autoNeu.getKennzeichen());
autoNeu=null;
-> jetzt sind alle Eigenschaften übertragen und die alte Referenz bleibt erhalten.

Kann man die Übertragung der Eigenschaften auch einfacher machen? Bei 30-40 Methoden is das ziemlich viel Schreibarbeit.
 
G

Guest

Gast
Danke für die Antwort.
Nur dabei geht meine alte Referenz verloren von meinem Objekt autoAlt. Außerdem möchte ich ja kein objekt klonen. Ich hab ja schon ein autoNeu. Versteh nicht ganz wie mir das hier helfen soll.
 

moormaster

Top Contributor
Anonymous hat gesagt.:
Danke für die Antwort.
Nur dabei geht meine alte Referenz verloren von meinem Objekt autoAlt. Außerdem möchte ich ja kein objekt klonen. Ich hab ja schon ein autoNeu. Versteh nicht ganz wie mir das hier helfen soll.

Du könntest dir das vereinfachen, in dem du in Klasse Auto eine weitere Methode einfügt, welche genau das macht; alle Eigenschaften eines anderen Autos abfragen und übernehmen. Jedoch wirst du dabei auch nicht drum herum kommen, innerhalb dieser Methode einmal alle set/get-Methoden durchlaufen zu müssen.

Um das zu automatisieren, könntest du mit Hilfe von Reflection:

http://www.galileocomputing.de/open...sel21_003.htm#Rxx747java21003040008AD1F03B100

einmal alle get-Methoden aufrufen und deren Rückgabewerte an die ähnlich heissenden set-Methoden übergeben.

Allerdings kommt mir diese Lösung nicht besonders elegant vor, weil das ziemlich anfällig ist. Was ist zum Beispiel, wenn da eine Methode getIrgendwas drin ist, die nur etwas ausrechnet und weder eine set-Methode dazu existiert noch eine einzelne Eigenschaft des Objekts zurückgegeben wird.
 
G

Guest

Gast
Kurz gesagt:
ich möchte Eigenschaften von Objekt B in Objekt A kopieren, ohne das mein Objekt A also die Referenz verloren geht.

Bei:
autoAlt = autoNeu
(Referenz von autoAlt ist weg und alle Eigenschaften sind übertragen) <- schlecht

Bei:
autoAlt.setFarbe(autoNeu.getFarbe());
autoAlt.setKennzeichen(autoNeu.getKennzeichen());
autoNeu=null;
(Referenz von autoAlt ist noch da und alle Eigenschaften sind übertragen) <- gut
Nachteil hier: Sehr viel Schreibarbeit und umständlich. Geht das anders?
 
G

Guest

Gast
Reflection hab ich mir schon gedacht.
Meine Objektstruktur hat nur getter und setter also keine methoden welche etwas berechnen, somit würde das funktionieren.

Gut wäre halt eine allgemein gehaltene Funktion welche eben z.B. ein Auto ein BMW und ein Citroen ein Lenkrad mittels Reflection ändern könnte.


Also der Rumpf der Methode könnte so aussehen:

public void uebertrageEigenschaften(objektAlt, objektNeu)
{

//??

}

Nur wie man anfängt das zu programmieren, da steh ich momentan aufm Schlauch.
 

Wildcard

Top Contributor
Mach das nicht. Reflections sind einfach kein natürliches Java.
Benutz wie schon erwähnt einen Copy-Konstruktor oder clone
 

moormaster

Top Contributor
Wildcard hat gesagt.:
Foobar hat dir die Antwort darauf schon gegeben.

sowohl Deep Copy als auch Copy Konstruktoren erzeugen völlig neue Referenzen eines bestehenden Objekts. Hier geht es aber gerade darum, dass die bereits exitsierende Referenz eines Objekts die Eigenschaften eines anderen annehmen soll. Da sehe ich nicht, inwiefern Deep Copy oder Copy Konstruktoren einem dabei helfen können sollen?
 
G

Guest

Gast
Hab ja aber schon erwähnt das das mit einem Copykonstruktor oder mit Clonable nicht funktioniert, da ich meine Referenz nicht verlieren darf! Wie soll das mit einem Copykonstruktor gehen was ich vorhab?
 

Wildcard

Top Contributor
ups.. hab ich wohl falsch verstanden. Dann währe eine copyFrom Methode in der Klasse wohl angebracht.
 

moormaster

Top Contributor
Anonymous hat gesagt.:
Also der Rumpf der Methode könnte so aussehen:

public void uebertrageEigenschaften(objektAlt, objektNeu)
{

//??

}

Nur wie man anfängt das zu programmieren, da steh ich momentan aufm Schlauch.

Da die Methode nicht static ist, braucht sie objektAlt nicht zu kennen; das Objekt, in dem sie sich beim Aufruf befindet, ist das alte Objekt.

Ansonsten, wenn du das unbedingt per Reflection lösen willst (wo ich nun nicht mehr der einzige bin, der das unschön findet ;) ), dann solltest du dich mal ein wenig darüber einlesen:

http://www.galileocomputing.de/open...sel21_001.htm#Rxx747java21001040008AB1F049257
http://www.galileocomputing.de/open...sel21_003.htm#Rxx747java21003040008AD1F03B100

und ein wenig damit experimentieren.

Allerdings deklarierst du jedes Objekt nur einmal, da könntest du auch einfach dir einmal die Mühe machen und die setMethoden "per hand" aufrufen. Dass du dabei 40 Aufrufe innerhalb eines Objektes brauchst, muss nicht sein. Wahrscheinlich ist, dass die meisten dieser 40 Eigenschaften nur geerbt sind und du dadurch schonmal einen Teil der Kopierarbeit von der Oberklassen abgenommen bekommen kannst:

Code:
 public class Auto extends Fahrzeug
 {
  int anzahlSitze;
  ...
  public void copyFrom(Auto b)
  {
    super.copyFrom(b);  // die Klasse Fahrzeug soll alle Eigenschaften kopieren, welche zu einem Fahrzeug gehören

    // nun werden nur noch die Eigenschaften übernommen, welche wirklich spezifisch zum Auto gehören
    setAnzahlSitze(b.getAnzahlSitze());
  }
  ...
 }

Damit sollte man doch schon genug erleichterung haben.
 
G

Guest

Gast
Danke nochmal für die Unterstützung vor allem von moormaster. Nach mehr als 6 Stunden ist es vollbracht und erstaunlicherweise funzt das ganze nun trotz RMI mit der copyFrom mechanik sehr gut.
Danke nochmal
 
G

Guest

Gast
Da ich in meiner Objektstruktur viel mit Strings arbeite und ein String immuatable ist, musste ich einen String nur noch in folgender Klasse kapseln:

Code:
import java.io.Serializable;

public class Klartext implements Serializable
{
	private static final long serialVersionUID = -3034397141666809085L;
	
	private String text;

	public Klartext()
	{
		this.text = "";
	}

	public Klartext(String text)
	{
		this.text = text;
	}

	public String getText()
	{
		return text;
	}

	public void setText(String text)
	{
		this.text = text;
	}

	public String toString()
	{
		return text;
	}

	public void kopiereVon(VorgangsObjekt objekt)
	{
		text = ((Klartext) objekt).getText();
	}
}
d.h wenn ich in meiner Objektstruktur einen String benötige benutze ich die Klasse new Klartext() dafür.
Denn jetzt kann sich meine Objektstruktur (oder Model) sogar seine Strings aktualisieren und zwar von selbst =)
 
M

Mario_H

Gast
Alternativ könntest du auch ein Hilfsobjekt machen, dass die Referenz auf dein Auto hält, dem kannst du dann mit einem set eine neue Referenz übergeben.

Im Vektor (oder wo auch immer) hast du die Referenz auf das Hilfsobjekt, die sich nicht verändert.
 
M

Mario_H

Gast
Oh, bisschen langsam getippt...
(Kamen 3 neue Posts hinzu während ich geschrieben hab..)
 
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

Neue Themen


Oben