Wobei man das natürlich in einem eigenen Interface vorgeben könnteDas Thema hatten wir neulich in einem anderen Thread und wenn man gegen Interfaces entwickelt, dann geht das mit dem clone() auch nicht mehr.
Oh ist clone() neuerdings keine Methode von Object mehr?dann hat man nach außen meist einfach ein List. Bei List hast du kein clone().
Doch, aber keine öffentliche.Oh ist clone() neuerdings keine Methode von Object mehr?
Ja, aber man nutzt natürlich das JDK und da ist es nicht enthalten. Es macht durchaus Sinn, dem ‚Mainstream‘ zu folgen und hier nicht einen eigenen Weg neu zu erfinden.Wobei man das natürlich in einem eigenen Interface vorgeben könnte![]()
Das heist?????Oh ist clone() neuerdings keine Methode von Object mehr?
@Schuriko Es kommt auf die Art der Kopie an... (shallow und deep um nur mal zwei nennen zu wollen.)
Ob es eine flache oder tiefe Kopie sein soll, ist dafür eigentlich irrelevant. In beiden Fällen ist das reines Implementierungsdetail, welches in beiden Fällen gleichermaßen möglich ist.Das heist?????
Bei einem clone würde dann eine NPE fliegen, bei einem Copy-Construktor kann man wenn möglich dann sinnvolle Default-Werte setzen.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.
Was ist ein NPE? Meinst du einen NullPointerException? Aber wieso sollte dieser von einer clone() - funktion ausgelöst werden?Bei einem clone würde dann eine NPE fliegen, bei einem Copy-Construktor kann man wenn möglich dann sinnvolle Default-Werte setzen.
NullPointerExceptionWas ist ein NPE?
Wenn du eine Methode (hier clone) auf einer Null Variablen aufrufst, dann kommt eine NPE.Was ist ein NPE? Meinst du einen NullPointerException? Aber wieso sollte dieser von einer clone() - funktion ausgelöst werden?
Achso war das gemeint, jep das stimmtWenn du eine Methode (hier clone) auf einer Null Variablen aufrufst, dann kommt eine NPE.
Die Problematik ist also in beiden Fällen ähnlich.
class ClassA {
....
}
class ClassB {
private ClassA;
public ClassB(ClassB b) {
....
}
}
Kommt drauf an, manchmal braucht man eine tiefe Kopie, machmal eine flache. Pauschal lässt sich das nicht entscheiden, meist reicht aber eine flache.würdet ihr dann in dem Konstruktur von ClassB eine neue Instanz von ClassA erzeugen. Oder würdet ihr die Klasse einfach so übernehmen?
Keine Ahnung ob ich dich richtig verstehe, aber solange eine Instanz irgendwo noch benötigt wird, wird sie nicht gelöscht.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.
Stimmt, daran hatte ich gar nicht gedacht. War wohl gestern abend schon zu spät. DANKE!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).