Sollen defensive Kopien immer für Objektreferenzen von veränderbaren Objekten erstellt werden, die an Konstruktoren übergeben werden?Wie tief sollten Konstruktoren kopiert werden?
Wenn ja, dann wie tief 'sollte ich gehen, um Kopien zu machen. Im folgenden Beispiel sollte ich tiefe Kopien in Kopierkonstruktoren aller beteiligten Klassen machen?
ZB:
class Graph {
AdjacencyList;
public Graph(Graph graph) {
this.list = graph.list; // shallow copy
OR
this.list = ArrayCopy(graph.list); // deep copy
}
}
class DFS implements GraphAlgo {
Graph g
DFS(Graph g) {
this.g = g; // shallow copy
OR
this.g = new Graph(graph) // deep copy
}
DFS(Algo algo) {
this.g = algo.g; // shallow copy
OR
this.g = new Graph(algo.g); // deep copy
}
}
class Algo {
GraphAlgo galgo
Algo (GraphAlgo dfsalgo) {
galgo = dfsalgo // shallow copy
OR
galgo = new DFSAlgo(dfsalgo); // deep copy
}
}
3 .. Was ist, wenn einige Klasse vergisst tiefe Kopie zu implementieren? Bedeutet das, dass ich niemals ein sicheres, tief kopiertes Objekt haben werde? Irgendeine Möglichkeit, dies zu verhindern?
Wage es nicht, dies zu tun! Siehe http://StackOverflow.com/q/2156120/1065197 –
Eine ObMention für "bevorzugen Unveränderlichkeit", dann müssen Sie sich nicht um solche Dinge kümmern. –