, предполагающий следующий класс:Как обновить поле в неизменном объекте
@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
откуда-то (удаленный сервис для модулей tance) и прикрепите его к message
. Но если я сделаю что-то вроде этого:
myMessageObject.setIdentifier(identifier);
Я предположительно нарушаю неизменяемость объекта. Если да, то как наилучшим образом обновить поле identifier
, избегая выполнения нового вызова конструктора (чтобы создать новый объект)?
Если вы можете обновить поданный, он больше не останется неизменным. – Saif
Почему вы хотите * изменяемый * объект, который аннотируется как '@ Immutable'. Я думаю, вы сначала подумали о своем дизайне перед тем, как попробовать такие вещи. –
Я хочу неизменный объект, но мне нужен способ прикрепления идентификатора с дистанционным кодом к сообщению, которое содержит неизменяемый объект. Согласно ответам, полученным до тех пор, пока нет, я боюсь, что это невозможно, если я не построю новый объект и не передам идентификатор в качестве аргумента конструктора. –