2012-02-09 25 views
8

Recibí estas preguntas en una entrevista.Java: Preguntas sobre el método de clonación

  1. qué necesitamos para cuidar de método clone en un entorno concurrente? ¿Podemos sincronizar el método de clonación?

  2. ¿Tiene algún sentido utilizar el método de clonación en clases singleton?

no tenía respuestas convincentes para esto durante la entrevista.

+13

No te preocupes por eso. Estas son preguntas de entrevista horribles, por lo que probablemente no quería trabajar allí de todos modos. – corsiKa

+0

¿Sabes lo que significa singleton? –

+1

¿Dónde está esto? ¿Puedo trabajar allí? –

Respuesta

1
  1. Si va a clonar un objeto que está sujeta a cambios en otros temas, entonces es probable que necesite adquirir algún tipo de [leer] bloquear al igual que si estuviera haciendo cualquier otra operación sobre el mismo. En teoría, necesitaría un bloqueo en el nuevo objeto si alguna vez pudiera estar sujeto a una publicación insegura (¡sugiero no publicar el objeto mutable de forma insegura!).

  2. No sería un singleton si pudiera hacer otra instancia de esto (existe el antipattern monostate que es como el antipattern singleton, solo que es peor y puede involucrar varios objetos sin un propósito claro). Supongo que si estuviera subclasificando alguna clase que implementara Cloneable, desea sobrescribir clone y arrojar CloneNotSupportedException es posible o devolver this.

2
  1. Probablemente sí el 99,99% de las veces, pero sólo hay que pensar en un clon como cualquier otro método de su clase y sincronizarlo si es necesario dependiendo de su contexto específico. No hay nada de malo en sincronizar un método que no está sincronizado en su clase Base. Por otro lado, no sincronizar un método mientras se sobreescriben una sincronizada es probablemente un error incluso si el código compila bien y se emitió ninguna advertencia ...

  2. una respuesta convincente sería probablemente NO con un par de palabras en el patrón de diseño singleton.