On 18/03/2015 11:06, Chris Hegarty wrote:
:

 /**
  * Checks that all final instance fields, declared by the class where
  * the {@code readObject} callback is being invoked, have been set.
  *
  * <p> This method is intended to be called as a final step after all
  * final instance fields have been set.
  *
  * @throws InvalidObjectException if one, or more, final instance
  *         fields have not been set
  */
 void checkAllFinalsSet() throws InvalidObjectException;


...and the user code would look similar to this, from java.io.File:

  s.fieldSetter().set("path", p)
                 .set("prefixLength", pLen)
                 .checkAllFinalsSet();
I think this is a lot clearer as it makes it explicit and in addition it is less confusing to have the InvalidObjectException thrown here rather than somewhere in the deserialization code.

-Alan

Reply via email to