Copy - Constructor vs clone()

Schuriko

Bekanntes Mitglied
Mir geht gerade die Frage durch den Kopf Copy-Constructor oder doch eher clone(). Im Prinzip machen es beide Funktionen ja gleich. Was bevorzugt ihr und warum?
 
K

kneitzel

Gast
Das Thema hatten wir neulich in einem anderen Thread und wenn man gegen Interfaces entwickelt, dann geht das mit dem clone() auch nicht mehr.
Wenn man z.B. mir ArrayLists arbeitet, dann hat man nach außen meist einfach ein List. Bei List hast du kein clone().
Der Konstruktor geht aber immer schön, da dieser einfach eine Collection nimmt.
 

Schuriko

Bekanntes Mitglied
Darf ich dazu nochmal etwas einwenden? Bei einem Copy-Constructor übergibt man eine Klasse zum kopieren. D.h. im Programm selbst könnte auch null übergeben werden, was theoretisch absolut legitim wäre, allerdings zu keiner kopie führen kann. Bei einem clone() würde ja schon die instanzierte Klasse zurückgegeben.
 

mrBrown

Super-Moderator
Mitarbeiter
Darf ich dazu nochmal etwas einwenden? Bei einem Copy-Constructor übergibt man Klasse zum kopieren. D.h. im Programm selbst könnte auch null übergeben werden, was theoretisch absolut legitim wäre, allerdings zu keiner kopie führen kann. Bei einem clone() würde ja schon die instanzierte Klasse zurückgegeben.
Bei einem clone würde dann eine NPE fliegen, bei einem Copy-Construktor kann man wenn möglich dann sinnvolle Default-Werte setzen.
 

Schuriko

Bekanntes Mitglied
Ich habs mal in meinem Projekt umgesetzt. Hierbei ist mir doch noch eine Frage bezüglich Copy-Constructor eingefallen. Wie würdet ihr vorgehen, bei einer Klasse. Also zum besseren Verstehen: Angenommen in der übergebenen Klasse befindet sich eine Instanz einer anderen Klasse z.B. wie folgt
Code:
class ClassA {
     ....
}

class ClassB {
    private ClassA;
    
    public ClassB(ClassB b) {
        ....
    }
}

würdet ihr dann in dem Konstruktur von ClassB eine neue Instanz von ClassA erzeugen. Oder würdet ihr die Klasse einfach so übernehmen? Denn angenommen die Instanz ClassA wird an einer Instanz von ClassB eingefügt werden, weil dann würde doch wenn ich die Instanz ClassA aus einem der beiden Klassen B lösche auch für die andere Instanz nicht mehr zur Verfügung stehen.
 

mrBrown

Super-Moderator
Mitarbeiter
würdet ihr dann in dem Konstruktur von ClassB eine neue Instanz von ClassA erzeugen. Oder würdet ihr die Klasse einfach so übernehmen?
Kommt drauf an, manchmal braucht man eine tiefe Kopie, machmal eine flache. Pauschal lässt sich das nicht entscheiden, meist reicht aber eine flache.

Denn angenommen die Instanz ClassA wird an einer Instanz von ClassB eingefügt werden, weil dann würde doch wenn ich die Instanz ClassA aus einem der beiden Klassen B lösche auch für die andere Instanz nicht mehr zur Verfügung stehen.
Keine Ahnung ob ich dich richtig verstehe, aber solange eine Instanz irgendwo noch benötigt wird, wird sie nicht gelöscht.

Wenn zwei Instanzen von B auf das gleiche A zeigen (B1-->A<--B2), ist egal wie sich eines der Bs ändert, weder ein löschen von A in einer Instanz (B1, B2-->A) ändert was an der anderen, noch wenn man ein zweites A einführt (B1-->A1, B2-->A2).
 

Schuriko

Bekanntes Mitglied
Kommt drauf an, manchmal braucht man eine tiefe Kopie, machmal eine flache. Pauschal lässt sich das nicht entscheiden, meist reicht aber eine flache.


Keine Ahnung ob ich dich richtig verstehe, aber solange eine Instanz irgendwo noch benötigt wird, wird sie nicht gelöscht.

Wenn zwei Instanzen von B auf das gleiche A zeigen (B1-->A<--B2), ist egal wie sich eines der Bs ändert, weder ein löschen von A in einer Instanz (B1, B2-->A) ändert was an der anderen, noch wenn man ein zweites A einführt (B1-->A1, B2-->A2).
Stimmt, daran hatte ich gar nicht gedacht. War wohl gestern abend schon zu spät. DANKE!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Copy-Constructor Java Basics - Anfänger-Themen 6
J Count und Copy in Stream<Path> Java Basics - Anfänger-Themen 11
B Copy Paste Befehl Java Basics - Anfänger-Themen 6
S Objekte klonen und Deep Copy Java Basics - Anfänger-Themen 30
B Files.copy wirft Exeption Java Basics - Anfänger-Themen 2
V java nio Files.copy Java Basics - Anfänger-Themen 10
Luk10 Arrays.copy(myArray) vs myArray.clone() Java Basics - Anfänger-Themen 9
B Eclipse Hotkeys (Copy Paste Undo Redo Save) spielen verrückt Java Basics - Anfänger-Themen 6
A Shallow copy .super.clone() Java Basics - Anfänger-Themen 2
L Array Copy Java Basics - Anfänger-Themen 7
M Cut, Copy und Paste in Symbolleiste einfügen Java Basics - Anfänger-Themen 4
A Objekt zwischen 2 Java programmen copy+Paste Java Basics - Anfänger-Themen 13
J Funktion Copy Area Java Basics - Anfänger-Themen 13
K Ich möchte in einem Text Editor cut, copy ,paste einfügen! Java Basics - Anfänger-Themen 2
C copy Java Basics - Anfänger-Themen 6
K Ant Copy Folder mit Zugriffschutz ausschliessen. Java Basics - Anfänger-Themen 2
M Cut, Copy und Paste mit mehreren Textfeldern? Java Basics - Anfänger-Themen 3
F Copy - zugriff verweigert ! Java Basics - Anfänger-Themen 5
W deep copy mehrdimensionaler Arrays Java Basics - Anfänger-Themen 11
H Deep Copy von Objekten Java Basics - Anfänger-Themen 4
H Shallow Copy von Objekten Java Basics - Anfänger-Themen 6
V Copy & "Paste" im Frame Java Basics - Anfänger-Themen 3
G Über undo, copy, cat, paste, delete Funktionen Java Basics - Anfänger-Themen 3
S Shallow Copy / Deep Copy von Objekten Java Basics - Anfänger-Themen 4
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
U Interface | constructor injection Java Basics - Anfänger-Themen 5
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
F The constructor Vehikel(String, int) is undefined warum?? Java Basics - Anfänger-Themen 4
L constructor cannot be applied... Java Basics - Anfänger-Themen 22
L Constructor is undefined Java Basics - Anfänger-Themen 4
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7
S CSVReader funktioniert nicht ---- The Constructor CSVReader(String) is undefined Java Basics - Anfänger-Themen 4
M Vererbung - Cannot Find Symbol constructor... Java Basics - Anfänger-Themen 11
S The constructor File(URL) is undefined Java Basics - Anfänger-Themen 10
N Klassen constructor Rückgabewert Java Basics - Anfänger-Themen 10
S Constructor und Main Methode Java Basics - Anfänger-Themen 3
S cannot find symbol, symbol: constructor Java Basics - Anfänger-Themen 2
L Erste Schritte Super Constructor mit Array - Liste? Java Basics - Anfänger-Themen 15
T Cannot refer to an instance field xxx while explicitly invoking a constructor Java Basics - Anfänger-Themen 14
M Was macht bzw. was bringt ein constructor? Java Basics - Anfänger-Themen 12
S Problem beim Kompilieren - cannot find symbol - constructor() Java Basics - Anfänger-Themen 12
W Default Constructor Java Basics - Anfänger-Themen 4
H OOP java.sql.Date does not have a no-arg default constructor Java Basics - Anfänger-Themen 2
S Array of objects und ständige Constructor-Aufrufe Java Basics - Anfänger-Themen 4
D Unhandled Exception type IOException in Constructor Java Basics - Anfänger-Themen 1
D The constructor Bestellung(Bestellung.Produkt, Bestellung.Kunde) is undefined Java Basics - Anfänger-Themen 15
B Im Constructor anderen Constructor aufrufen Java Basics - Anfänger-Themen 13
U Implementierung Constructor Java Basics - Anfänger-Themen 7
J Hilfe mit Constructor Java Basics - Anfänger-Themen 3
G The constructor is ambiguous Java Basics - Anfänger-Themen 1
S BufferedWriter undefined constructor Java Basics - Anfänger-Themen 5
I call to super must be first statement in constructor Java Basics - Anfänger-Themen 3
C Ein letzter Fehler mit dem Constructor ! Java Basics - Anfänger-Themen 17
G Constructor & Graphics g Java Basics - Anfänger-Themen 5
N Constructor.isSynthetic() Java Basics - Anfänger-Themen 4
V Problem mit Symbol constructor Java Basics - Anfänger-Themen 5
G constructor auflösen? Java Basics - Anfänger-Themen 10
L Compiler-Fehler SupressWarning für clone() Java Basics - Anfänger-Themen 6
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
B Klasse: Methode Clone Java Basics - Anfänger-Themen 5
Q Methode clone() bei Vererbung Java Basics - Anfänger-Themen 5
U "Clone" Fragen Java Basics - Anfänger-Themen 3
H Interface clone-Methode in Interface Java Basics - Anfänger-Themen 6
B Deep Clone Java Basics - Anfänger-Themen 12
K clone() Java Basics - Anfänger-Themen 12
D probs mit clone und equals Java Basics - Anfänger-Themen 10
B clone() und casts umschreiben Java Basics - Anfänger-Themen 4
S Eigenes Objekt temporär verändern? (Clone)? Java Basics - Anfänger-Themen 12
T Deep Clone Java Basics - Anfänger-Themen 3
I clone() und Referenzen Java Basics - Anfänger-Themen 25
E Vector und clone() Java Basics - Anfänger-Themen 6
M Brauch ich dazu clone()? Java Basics - Anfänger-Themen 5
C Frage zu clone() Java Basics - Anfänger-Themen 2
B clone(), Clonable und Felder von Interfacetypen Java Basics - Anfänger-Themen 3
G Frage zu clone() Java Basics - Anfänger-Themen 6
G Problem clone und Vektor Java Basics - Anfänger-Themen 4
P Clone Methode treibt mich zum Wahnsinn Java Basics - Anfänger-Themen 10
M Arrays clonen mit clone() scheint nicht zu funktionieren Java Basics - Anfänger-Themen 4
S JPanel mit clone() duplizieren Java Basics - Anfänger-Themen 4
S Objekt klonen mit clone() Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben