¿Absolutamente tienes que usar clone? La mayoría de la gente está de acuerdo en que Java no funciona clone.
Josh Bloch sobre diseño: constructor de copias versus clonación
Si ha leído el artículo sobre la clonación en mi libro, especialmente si lee entre líneas, sabrá que creo que cloneestá profundamente roto. [...] Es una pena que Cloneablese rompa, pero pasa.
Puede leer más discusiones sobre el tema en su libro Effective Java 2nd Edition, Item 11: Override clonejuiciosamente . En cambio, recomienda utilizar un constructor de copias o una fábrica de copias.
Continuó escribiendo páginas de páginas sobre cómo, si cree que debe hacerlo, debe implementarlo clone. Pero cerró con esto:
¿Son todas estas complejidades realmente necesarias? Raramente. Si extiende una clase que implementa Cloneable, no tiene más remedio que implementar un clonemétodo que se comporte bien . De lo contrario, es mejor que proporcione medios alternativos de copia de objetos o simplemente no brinde la capacidad .
El énfasis era suyo, no mío.
Como dejó en claro que no tiene más remedio que implementar clone, esto es lo que puede hacer en este caso: asegúrese de eso MyObject extends java.lang.Object implements java.lang.Cloneable. Si ese es el caso, puede garantizar que NUNCA contraerá un CloneNotSupportedException. Lanzar AssertionErrorcomo algunos han sugerido parece razonable, pero también puede agregar un comentario que explique por qué nunca se ingresará el bloque de captura en este caso particular .
Alternativamente, como también han sugerido otros, quizás pueda implementar clonesin llamar super.clone.
Cloneable, lanzar un enAssertionErrorlugar de un simpleErrores un poco más expresivo.