title: Why are Java enums not clonable?
body: <p><em>It's too late to change the question, but more precise would have been to ask "Why does clone() not allow singletons?". A <code>copy()</code> method would be more convenient.</em></p>
  
  <hr>
  
  <p>Is there any reason why enums in Java cannot be cloned?</p>
  
  <p>The manual states that </p>
  
  <blockquote>
    <p>This guarantees that enums are never cloned, which is necessary to preserve their "singleton" status. </p>
  </blockquote>
  
  <p>But returning the instance itself would also preserve its status, and I would be able to handle associated enums the same way as other clonable objects.</p>
  
  <p>One may argue that </p>
  
  <blockquote>
    <p>The general intent [of clone()] is that, for any object x, the expression: 
     <code>x.clone() != x</code> will be true, [...]</p>
  </blockquote>
  
  <p>But for singletons on the contrary I want <code>x.clone() == x</code> to be true. If the instance itself would be returned, then the singleton pattern would be transparent to referencing objects.</p>
  
  <p>So why are enums not allowed to be cloned or did they forget to think about singletons and immutables, when <code>clone()</code> was specified?</p>