The Object.clone / java.lang.Cloneable mechanism in Java should be considered broken for the following reasons and
should, consequently, not be used:
  -  
Cloneable is a marker interface without API but with a contract about class behavior that the compiler cannot enforce.
  This is a bad practice.  
  -  Classes are instantiated without calling their constructor, so possible preconditions cannot be enforced. 
 
  -  There are implementation flaws by design when overriding 
Object.clone, like type casts or the handling of
  CloneNotSupportedException exceptions.