title: How to update a field in a immutable object
body: <p>Supposing the following class:</p>
  
  <pre><code>@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;
   }
  
  }
  </code></pre>
  
  <p>Once we have built an object of this class, </p>
  
  <pre><code>MyMessageClass myMessageObject = new MyMessageClass("Once upon a time ...");
  </code></pre>
  
  <p>and once we have finish doing some operations with it, </p>
  
  <pre><code> logger.info("The message is{}",myMessageObject.messageValue());
   logger.info("The last change was done on {}",myMessageObject.lastChange());
  </code></pre>
  
  <p>it is expected to get an <code>identifier</code> from somewhere (a remote service, for instance) and attach it to the <code>message</code>. But, if I do something like this:</p>
  
  <pre><code>myMessageObject.setIdentifier(identifier);
  </code></pre>
  
  <p>I supposedly breaking the immutability capability of the object. If so, how is the best way to update the <code>identifier</code> field avoiding to do a new constructor call (so creating a new object)?</p>