假設下面的類更新字段:如何在不可變對象
@Immutable
public final MyMessageClass {
private String message;
private Date dateLastChange;
private String identifier;
public MyClass(final String message){
this.message = message;
dataLastChange = new Date();
}
public Date lastChange() {
return new Date(dateLastChange.getTime());
}
public String messageValue(){
return message;
}
}
一旦我們建立了這個類的一個對象,
MyMessageClass myMessageObject = new MyMessageClass("Once upon a time ...");
,一旦我們完成做一些操作與它,
logger.info("The message is{}",myMessageObject.messageValue());
logger.info("The last change was done on {}",myMessageObject.lastChange());
它預計從某個地方得到identifier
(遠程服務,爲ins tance)並將其附加到message
。但是,如果我做這樣的事情:
myMessageObject.setIdentifier(identifier);
我理應打破對象的不變性能力。如果是這樣,請更新identifier
字段以避免執行新的構造函數調用(創建新對象)的最佳方法是什麼?
如果你可以更新提交它不會永遠不會改變。 – Saif
爲什麼你想要一個註解爲@ @ Immutable'的* mutable *對象。我想你在嘗試這樣的事情之前首先考慮你的設計。 –
我想要一個不可變的對象,但我需要一種將遠程生成的標識符附加到不可變對象包含的消息的方法。根據收到的答案,直到沒有,恐怕這是不可能的,除非我建立一個新的對象,並將標識符作爲構造函數參數傳遞。 –