¿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 clone
está profundamente roto. [...] Es una pena que Cloneable
se rompa, pero pasa.
Puede leer más discusiones sobre el tema en su libro Effective Java 2nd Edition, Item 11: Override clone
juiciosamente . 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 clone
mé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 AssertionError
como 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 clone
sin llamar super.clone
.
Cloneable
, lanzar un enAssertionError
lugar de un simpleError
es un poco más expresivo.