如何使一個可變對象的防禦副本在不可變對象中包含可變字段?如何製作對象的防禦副本?
class ImmutableObject {
private final MutableObject immutable_field;
ImmutableObject(MutableObject y) {
this.immutable_field = y;
}
}
class MutableObject {
public int mutable_field;
}
- 的MutableObject沒有一個構造函數,讓我設定的領域。
- MutableObject的當前狀態應該在不可變對象中捕獲並且永遠不會改變。
對不起,我的無知,但什麼是對象的「防禦副本」?什麼是用例? – 2010-06-02 03:28:32
它不是真正的不可變的,如果它包含一個可變對象嗎?......你將不會擁有不可變對象帶來的安全性和併發性。 – Artefacto 2010-06-02 03:29:27
即使我認爲immutable_field不能被訪問,如果有人改變了MutableObject,我的字段也會改變。這就是爲什麼我需要創建一個對象的副本,以便它指向一個無法訪問的新對象。這被稱爲「防禦性複製」。 – unj2 2010-06-02 03:31:27