¿Por qué no hay clone predeterminado () en Cloneable en Java 8?

Cloneable en Java está inherentemente roto. Específicamente, mi mayor problema con la interfaz es que espera un comportamiento del método que no define el método en sí. Entonces, si atraviesas unCloneable En la lista debe usar la reflexión para acceder a su comportamiento definido. Sin embargo, en Java 8, ahora tenemos métodos predeterminados y ahora pregunto por qué no hay un predeterminadoclone() método enCloneable.

entiendo porquelas interfaces no pueden predeterminar los métodos ObjectSin embargo, esta fue una decisión de diseño explícita y, por lo tanto, se pueden hacer excepciones.

Me imagino depreciarObject.clone() y cambiando su código interior a algo como:

if(this instanceof Cloneable) {
    return ((Cloneable) this).clone();
}
else {
    throw new CloneNotSupportedException();
}

Y seguir adelante con lo que sea que la magia hagaclone() hacer lo suyo como método predeterminado enCloneable. Esto realmente no soluciona esoclone() todavía puede implementarse fácilmente de manera incorrecta, pero esa es otra discusión en sí misma.

Hasta donde puedo, este cambio sería completamente compatible con versiones anteriores:

Clases que actualmente anulanclone() pero no implementóCloneable (¡¿POR QUÉ ?!) aún estaría técnicamente bien (incluso si es funcionalmente imposible, pero esto no es diferente de lo que era antes).Clases que actualmente anulanclone(), pero implementóCloneable funcionaría igual en su implementación.Clases que actualmente no anulanclone(), pero implementóCloneable (¡¿POR QUÉ ?!) ahora seguiría una especificación, incluso si no escompletamente Funcionalmente correcto.Los que usaron la reflexión y se refirieron aObject.clone() funcionaría funcionalmentesuper.clone() seguiría siendo funcionalmente el mismo incluso si se hace referencia aObject.clone().

Sin mencionar que esto resolvería un gran problema queCloneable es. Si bien es tedioso y fácil de implementar incorrectamente, resolvería un gran problema orientado a objetos con la interfaz.

El único problema que puedo ver con esto es aquellos que implementanCloneable no están obligados a anularclone(), pero esto no es diferente de lo que era antes.

¿Se ha discutido esto internamente, pero nunca llegó a buen término? Si es así, ¿por qué? Si es por la razón que las interfaces no pueden predeterminar los métodos Object, ¿no tendría sentido hacer una excepción en este caso ya que todos los objetos heredanCloneable están esperandoclone() ¿de todas formas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta