、、などはわかりますがdeep copy
、主な疑問は、いつオブジェクト参照をディープ コピーするかということです。またはどのくらいの頻度ですか?shallow copy
how to deep copy
シナリオ 1 :
コードを検討してください。完全なコードについては、http://pastebin.com/WEgeBFNbを参照してください。
class Box{
Position pos;
Box(Position p){
pos = p;
}
Position getPosition(){
return pos;
}
}
そしてmain()
好き:
public class Sample{
public static void main(String args[]){
Position pos = new Position(3,5);
Box box = new Box(pos);
pos.setX(5);
System.out.println( box.getPosition().getX());
// Will print 5, but I want Box to retain its value
}
私は上記の要件を次の方法で達成しました。
Box(Position p){
pos = new Position(p); // Deep cloning
}
Position
次に、次のようなコピー コンストラクターも必要です。
Position(Position p){
x = p.x;
y = p.y;
}
しかし、私の質問は次のとおりです。いつディープ クローニングを使用するのですか?
シナリオ 2: たとえば、ac# コードを検討します。
List<Accounts> = Mysession.getAllAccounts();
. ここで、返されたオブジェクトの変更がセッション オブジェクトに反映されないようにする必要があります。(このケースは C# だけでなく、一般的にどのoop
言語にもあります)
したがって、ディープ クローン作成を開始すると、has-a 関係を使用して最大 5 レベルの深いオブジェクトになるため、簡単な作業ではありません。
もう一度言いますが、正確に 100% 取得するには、ディープ クローンを作成する必要があります。同意。
- より一般的なものは何ですか? 参照またはオブジェクトのコピーを返しますか?
- ディープ クローニングは面倒なプロセスであり、避けなければならないと聞きました。では、どのくらいの頻度でディープクローンを作成できますか?
- いくつかのシナリオ例を挙げていただけますか (コードは不要です)。
- 上記の
box
例のような初期化中に、クローンを使用する必要がありますpos = new Position(p)
か? または通常の割り当てpos = p
?