Kopieren von klassen

Status
Nicht offen für weitere Antworten.
S

Soulfly21

Gast
Hallo Leute

ich moechte eine Kopie von einer Klass erstellen die recht viele Unterklassen und Verschachtlungen enthaelt: AHbe mal die ungefaehre grobe Klassenstrukture hier (Ich hoffe es ist verstaendlich :shock: )

Code:
class Top {

 // viele unterklassen und variablen
 
}

int getSolution(Top t) {
 
   //  starte getResult mit einer Kopie von t  und type=0
   //  starte getResult mit einer Kopie von t  und type=1
   //  starte getResult mit einer Kopie von t  und type=2
  
  //  auswaertung der der ergebniss und 
  //  aendere variablen der klasse t abhaengig vom result

}


private int getResult(Top t, int type) {
//    aendere variablen der klasse t abhaengig vom type;
//    starte einen Algorithmus 
//    gebe den Wert zurueck
}

Wie kann ich das denn gewerkstelligen. Ich habe schon mit Cloneable und clone versucht da was zu machen aber die Klasse Top besitzt einfach zu viele Unterklassen.
Gibt es da eine einfache Loesung ?

Gruss
Soulfly
 

RaoulDuke

Bekanntes Mitglied
Ich verstehe nicht wirklich was du machen willst. Könntest du mal, ganz unabhängig von dem Programmcode, erklären was du im Endeffekt mit deinem Programm erreichen möchtest?

Ausserdem solltest du mal zwischen Klasse und Instanz unterscheiden. In deinem Programm möchtest du Instanzen kopieren, keine Klassen. Eine Klasse ist nur der Bauplan für ein Objekt. Wenn du ein Objekt einer Klasse erzeugst, dann ist das eine Instanz einer Klasse.
 
G

Guest

Gast
OK ich werde es mal veruschen

Ich habe ein program zum darstellen von elektrischen Netzen(Graphen) erstellt. Dort werden Transformatoren, Sicherungen, Schalter und weitere Elemente angezeigt und einstellbar. Dazu benutze ich u.a. JGraph.
Ich habe einen Algorithmuss geschrieben der nun den Graphen durchlaeuft und die elektrischen eigenschaften berechnet
(calculateAlgorithmus)

Jetzt moechte ich das Programm um einen Algorithmus erweitern und zwar soll es moeglich sein einen Defekt in einer Leitung zu simulieren und der Algorithmus soll den defekt lokalisieren, isolieren und andere Schalterstellungen oeffnen um nicht defekte parts doch noch mit Strom zu versorgen.
Abhaengig ist der defektAlgorithmus allerdings auch von dem calculateAlgorithmus der einen Graph als parameter erwartet.

Wenn ich aber Schalterstellungen und andere eigenschaften in dem defektAlgorithmus aendere, aendere ich diese an dem orginal graphen und es ist nicht so einfach alle sachen die geaendert sind zu speichern um den Orginal zustand wieder herstellen zu koennen.
Daher moechte den defektAlgorithmus mit kopien von dem Graphen durchlaufen lassen um somit nicht den orginal graphen zu veraendern und dann wirklich nur endgueltigen Aenderungen an den orginal graphen vorzunehmen

So hoffe das ich es enigermassen rueber gebracht habe.

Gruss
Soulfly
 

SnooP

Top Contributor
Jo klingt doch gut... - die schnellste (performanteste) Methode ist das ganze per clone-Methoden zu erledigen... jede Klasse muss dabei halt eine clone-Methode implementieren, die nicht nur die primitiven Datentypen, sondern halt auch alle Referenzen auf andere Klassen mitkopiert (sog. Deep-Copy, Vorsicht bei Graphen, die Zyklen aufweisen können damit man nicht unendlich Objekte kopiert die bereits kopiert wurden... ein elektrisches Netz klingt spontan nach zyklischem Graph).

Eine andere einfachere Möglichkeit wäre den SerializationCopier-Trick anzuwenden. Dabei benutzt man die Möglichkeit mit Hilfe der Java-Klassen ObjektOutput bzw. InputStream eine Objektstruktur (das Graph-Objekt) zu serialisieren und anschließend direkt wieder einzulesen. Durch das Serialisieren und Deserialisieren wird automatisch dann eine Kopie des Objekts (bzw. der Objektstruktur) erzeugt...
Hier ist eine Anleitung dazu:
http://www.javaworld.com/javaworld/javatips/jw-javatip76.html

Wichtig hierbei - alle Klassen müssen das Interface Serializable implementieren.
 
G

Guest

Gast
Gut danke fuer die Tips.

Werde es mal mit dem Clone ausprobieren obwohl ich dem nicht zu geneigt bin......

Egal

Gruss
Soulfly
 

AlArenal

Top Contributor
Ich bin eher ein Freund des Copy-Konstruktors. Das Cloneable-Interface ist mal eine der bescheuertsten Ideen im JDK. Als Tag-Interface beinhaltet es gar nichts und so kann man nicht mal flott über ne Liste von Objekten, die Cloneable implementieren (haha, ein Oxymoron, ein leeres Interface zu implementieren ;) ), iterieren und #clone aufrufen. Warum? Weil zwar jedes Object eine #clone besitzt, diese aber protected ist. Cloneable empfielt in der Doku lediglich, diese mit einer public #clone zu überschreiben.

Ist natürlich super unpraktisch und lame erstmal zu checken, ob eine Instanz, deren Klasse Cloneable implementiert, auch eine public #clone besitzt. Interfaces sind u.a. eigentlich dazu gedacht solchen Mummenschanz unnötig zu machen.
Daher verzichte ich auf das Drecksteil. Entweder benutzt man ein eigenes Interface (mit Methode ;) ), oder nen Copy-Konstruktor. Aber jemandem zu empfehlen sich mit Cloneable abzugeben, wenn er aufgrund irgendwelcher Zwänge nicht muss, verwirrt die Leute mehr, als ihnen zu helfen.

Cloneable steht definitiv auf der dunklen Seite der Macht...
 

byte

Top Contributor
Da hasse räsch, schön is das wirklich nich gemacht. Dafür ists schnell. Ich bevorzuge aber auch Copy Konstruktoren. Aber einfach aus dem Grund, weil die einfacher zu Debuggen sind. Clone macht per Default eine Shallow Copy. Wenn ich komplexe Datenstrukturen mit Zyklen klone, dann können sich dadurch leichter Fehler einschleichen Vergisst man ein Feld zu kopieren, so fällt das erstmal nicht auf.
 

SnooP

Top Contributor
AlArenal hat gesagt.:
... Aber jemandem zu empfehlen sich mit Cloneable abzugeben, wenn er aufgrund irgendwelcher Zwänge nicht muss, verwirrt die Leute mehr, als ihnen zu helfen.
Jemandem von einem Copy-Konstruktor zu erzählen, ohne genau zu erklären, wie das jetzt nun wieder funktionieren soll, verwirrt aber sicherlich auch ;)
 

AlArenal

Top Contributor
SnooP hat gesagt.:
Jemandem von einem Copy-Konstruktor zu erzählen, ohne genau zu erklären, wie das jetzt nun wieder funktionieren soll, verwirrt aber sicherlich auch ;)

Würde ich das direkt tun, würde mir wieder einer an die Karre pinkeln, weil ich nciht auf die Suchfunktion, FAQ oder sonstwas verweise. Ist ja schon sträflich hier Google-Ergebnisse zu verlinken. Man (ich) kann es also nur falsch machen :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Nur benötigte Klassen in executable jar kopieren! Java Basics - Anfänger-Themen 6
M Klassen und Objekte (kopieren) Java Basics - Anfänger-Themen 7
G variable kopieren bzw. woanders benutzen Java Basics - Anfänger-Themen 6
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
A BinaryTree komplett kopieren Java Basics - Anfänger-Themen 7
M Arrays in Funktion Kopieren und Bearbeiten Java Basics - Anfänger-Themen 4
J Zweidimensionales array kopieren und in eindimensionales überführen Java Basics - Anfänger-Themen 304
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
S Input/Output Vom Netzwerk kopieren Java Basics - Anfänger-Themen 6
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
C Objekt (tief)-kopieren Java Basics - Anfänger-Themen 2
M Input/Output Word File Kopieren Java Basics - Anfänger-Themen 12
TomatenBrot447 Wie kann man ein Objekt kopieren? Java Basics - Anfänger-Themen 11
W Datentypen Kopieren von Arrays Java Basics - Anfänger-Themen 4
M Input/Output Datei in Laufzeit-JAR kopieren Java Basics - Anfänger-Themen 6
D Input/Output Ordner aus .Jar in das Verzeichnis der .Jar kopieren Java Basics - Anfänger-Themen 1
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B Kopieren von Dateien mit Adminberechtigungen Java Basics - Anfänger-Themen 14
D 2 D Arrays kopieren Java Basics - Anfänger-Themen 3
S double[x] , double[y] zu Point[] points kopieren? Java Basics - Anfänger-Themen 15
C Array kopieren und nur bestimmte Werte speichern Java Basics - Anfänger-Themen 6
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
C Datei identisch Kopieren Java Basics - Anfänger-Themen 3
E Textdatei kopieren funktioniert nicht Java Basics - Anfänger-Themen 12
L Source Code in Editor kopieren Java Basics - Anfänger-Themen 5
S ods-Dateo kopieren Java Basics - Anfänger-Themen 12
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
S Binärbaum kopieren Java Basics - Anfänger-Themen 6
J Klassen Fehler Datei kopieren - was mache ich falsch Java Basics - Anfänger-Themen 19
M Kopieren einer .wav Datei Java Basics - Anfänger-Themen 6
J Dienst zum Text kopieren und Variable hochzählen Java Basics - Anfänger-Themen 7
V Zwei Array in einem kopieren Java Basics - Anfänger-Themen 3
T TreeSet sortiert in ein anderes kopieren Java Basics - Anfänger-Themen 2
B Methode zum kopieren von Arrays Java Basics - Anfänger-Themen 9
C Referenz auf ein Objekt kopieren! Java Basics - Anfänger-Themen 2
J Text kopieren an bestimmter Stelle Java Basics - Anfänger-Themen 8
T ArrayList kopieren Java Basics - Anfänger-Themen 10
M Java-Datei in Ordner Kopieren Java Basics - Anfänger-Themen 12
S Dateien in RAM kopieren und ausführen? Java Basics - Anfänger-Themen 4
B Dateien kopieren, entpacken, XML auslesen! Java Basics - Anfänger-Themen 7
M Array Inhalt kopieren Java Basics - Anfänger-Themen 3
D Mehrere Datein kopieren Java Basics - Anfänger-Themen 10
H Interface JTextPane html formatiert kopieren Java Basics - Anfänger-Themen 2
Dogge Datei kopieren Java Basics - Anfänger-Themen 13
F Kopieren von Ordner sammt inhalt Java Basics - Anfänger-Themen 5
S Dateien mittels Path(s) kopieren und umbenennen. Java Basics - Anfänger-Themen 4
C Erste Schritte Integer Werte in Array kopieren Java Basics - Anfänger-Themen 21
R Datei kopieren: Performance erhöhen Java Basics - Anfänger-Themen 10
B Erste Schritte Dateien ueber Netzwerk kopieren Java Basics - Anfänger-Themen 2
S File Kopieren Path Pfad Problem Java Basics - Anfänger-Themen 3
T Methoden Array kopieren: Wie geht das? Java Basics - Anfänger-Themen 20
R Kopieren einer Datei Java Basics - Anfänger-Themen 18
G Kopieren von Array-Daten Java Basics - Anfänger-Themen 6
A Datein kopieren: File oder xcopy? Was ist schneller? Java Basics - Anfänger-Themen 10
L Datei kopieren Java Basics - Anfänger-Themen 11
F Text aus Textfeld1 in Textfeld 2 kopieren Java Basics - Anfänger-Themen 5
N IndexOutOfBoundsException: Source does not fit in dest beim Kopieren von ArrayList in Vector Java Basics - Anfänger-Themen 4
eLogic Ordner kopieren/schreiben Java Basics - Anfänger-Themen 2
G Text aus TextArea in Zwischenablage kopieren Java Basics - Anfänger-Themen 6
J Jar kopieren und einfügen Java Basics - Anfänger-Themen 4
X Zeile in Tabelle kopieren und in andere einfügen Java Basics - Anfänger-Themen 6
N Kopieren einer ArrayListe Java Basics - Anfänger-Themen 3
D In Zwischenablage kopieren Java Basics - Anfänger-Themen 8
C Datei kopieren - Erweiterung java.io.File Java Basics - Anfänger-Themen 2
S datein kopieren Java Basics - Anfänger-Themen 5
N Vectorinhalt kopieren Java Basics - Anfänger-Themen 4
K Datentypen Bestimmten Part aus String kopieren mit RegEx Java Basics - Anfänger-Themen 4
B .class datei kopieren und auführen Java Basics - Anfänger-Themen 8
C Bilder von Server zu Server kopieren über Webdav(Sardine) Java Basics - Anfänger-Themen 5
F Object kopieren in GWT Java Basics - Anfänger-Themen 2
D HashMap mit Inhalt kopieren Java Basics - Anfänger-Themen 8
S element in Array kopieren Java Basics - Anfänger-Themen 12
N Mac - Java Code aus dem Forum kopieren Java Basics - Anfänger-Themen 12
S Array im Konstruktor kopieren Java Basics - Anfänger-Themen 8
D Referenztyp kopieren nicht refenenzieren ?! Java Basics - Anfänger-Themen 4
A 2 arrays zu einem Kopieren Java Basics - Anfänger-Themen 2
H Datei kopieren per Eingabe Java Basics - Anfänger-Themen 11
G Array kopieren Java Basics - Anfänger-Themen 4
F Verschachtelte Arrays kopieren und überschreiben Java Basics - Anfänger-Themen 4
S JLabel clonen/kopieren Java Basics - Anfänger-Themen 2
F Verzeichnisse und Dateien kopieren Java Basics - Anfänger-Themen 3
K Spielbrett kopieren Java Basics - Anfänger-Themen 4
H Datei in den Windows-Programmordner kopieren Java Basics - Anfänger-Themen 5
D Objektehierarchie kopieren Java Basics - Anfänger-Themen 3
B Teile einer Image in neue Image kopieren Java Basics - Anfänger-Themen 4
S Grosse Dateien kopieren/Verschieben Java Basics - Anfänger-Themen 14
H Liste kopieren Java Basics - Anfänger-Themen 22
G POI: Zelle aus einer Tabelle kopieren und in einr anderen einfügen Java Basics - Anfänger-Themen 5
S Dateien von einem Ordner in den anderen kopieren Java Basics - Anfänger-Themen 2
S String nach erstem Whitespace kopieren Java Basics - Anfänger-Themen 3
B Teil eines Bild kopieren bei verschiedenen Zoomstufen Java Basics - Anfänger-Themen 3
M "spezieller" Zeilenumbruch beim Kopieren Java Basics - Anfänger-Themen 3
J ArrayList<Point> in eine neue ArrayList<Point> kopieren Java Basics - Anfänger-Themen 8
K Klonen und Kopieren von Dateien Java Basics - Anfänger-Themen 6
R DerbyDB nach MS Access kopieren Java Basics - Anfänger-Themen 41

Ähnliche Java Themen

Neue Themen


Oben