2011-10-14 7 views
6

He leído el javadoc para Object y Cloneable y simplemente no estoy "obteniendo" algo. Por favor alguien puede explicar a mí el rendimiento y/o diferencias funcionales a los dos ejemplos siguientes:Reemplazar clon con y sin clonable

public class Widget 
{ 
    @Override 
    public Widget clone() 
    { 
      // ... return a clone of this Widget 
    } 
} 

..y:

public class Widget implements Cloneable 
{ 
    @Override 
    public Widget clone() 
    { 
      // ... return a clone of this Widget 
    } 
} 

Desde Cloneable no tiene ningún métodos vinculados a ésta, y sólo le da acceso al método clone() protegido de Object, ¿tiene sentido siquiera implementarlo en primer lugar, teniendo en cuenta que tendrá que escribir su propio código (seguro) clon() de cualquier manera? ? Gracias de antemano por cualquier aclaración/entrada.

Respuesta

5

Es un contractual obligation. ser arrojado

La invocación de método clone de objetos en una instancia que no implementa la interfaz los resultados Cloneable en la excepción CloneNotSupportedException.

Si bien puede haber ningún método para anular, que todavía están implementando una interfaz eres parte de. Al hacer esto, asumes todo lo que viene con su contrato posterior. Te obliga a implementar a sabiendas el método clone(), lo que hace que el comportamiento sea explícito.

+0

Muy interesante, ¡gracias! – IAmYourFaja

+0

el enlace ya no funciona – marcospgp

0

a) La clonación invoca una forma extralingüística de construir objetos, sin constructores.

b) La clonación requiere que trate de alguna manera con CloneNotSupportedException - o moleste al código del cliente para tratarlo.

c) Las ventajas son pequeñas: no es necesario escribir manualmente un constructor de copiado. Por lo tanto, use Cloneable judiosly. No le brinda suficientes beneficios en comparación con el esfuerzo que necesita para hacer las cosas bien.

About Java cloneable