¿Puede alguien explicarme el idioma de captura de constructor privado con un ejemplo y señalar dónde realmente necesitamos/no necesitamos este tipo de diseño?¿Qué es un ejemplo de Java de la expresión "captura de constructor privado"?
Respuesta
El objetivo es capturar un valor temporal durante la construcción.
Un ejemplo se da en la solución 53 de Java Puzzlers:
public class MyThing extends Thing {
private final int arg;
public MyThing() {
this(SomeOtherClass.func());
}
private MyThing(int i) {
super(i);
arg = i;
}
}
En este caso, queremos capturar y almacenar el parámetro que se desea pasar al constructor de la superclase. Para hacerlo, creamos un constructor auxiliar privado, que nuestro constructor público llama.
Se proporciona una explicación con un ejemplo en Java Concurrency In Practice capítulo 4 sección 4.3.5.
public class SafePoint {
private int x, y;
private SafePoint(int[] a) {
this(a[0], a[1]);
}
public SafePoint(SafePoint p) {
this(p.get());
}
public SafePoint(int x, int y) {
this.x = x;
this.y = y;
}
public synchronized int[] get() {
return new int[] { x, y };
}
public synchronized void set(int x, int y) {
this.x = x;
this.y = y;
}
}
El constructor privado existe para evitar la condición de carrera que se produciría si el constructor de copia se implementa como este (p.x, p.y).
¿Qué quiere decir es que, si usted no tiene un constructor privado y se implementa constructor de copia en la siguiente forma:
public SafePoint(SafePoint p) {
this(p.x, p.y);
}
Supongamos ahora que el hilo A es tener el acceso a SafePoint p está ejecutando encima copian la instrucción this (px, py) y en el momento desafortunado otro hilo B que también tiene acceso a SafePoint p ejecuta set setter (int x, int y) en el objeto p. Desde su copia constructor está accediendo p 's x y y variable de instancia directamente sin bloqueo adecuado que podría ver estado incoherente de objeto p.
Donde como el constructor privado está accediendo variables p 's x y y través de captador que se sincroniza por lo que están garantizados para ver estado consistente de objeto p.
- 1. ¿Por qué no es privado el constructor de String()?
- 2. ¿Cuál es la necesidad de un constructor privado en C#?
- 3. ¿Por qué necesitamos un constructor privado?
- 4. constructor privado
- 5. ¿Por qué una enumeración tiene un constructor privado de paquetes?
- 6. Java Spring Bean con constructor privado
- 7. Ejemplo de encabezado privado/público?
- 8. En Java, ¿cómo hago una clase con un constructor privado cuya superclase también tiene un constructor privado?
- 9. ¿Cómo puedo acceder a un constructor privado de una clase?
- 10. Constructor privado en la clase abstracta
- 11. C++ - ¿Qué está haciendo esto si el constructor es privado?
- 12. Java: acceso al constructor privado con parámetros de tipo
- 13. constructor privado y final
- 14. ¿Qué tipo de llamada de constructor de Java es esta?
- 15. se extiende de la clase con constructor privado
- 16. ¿Qué es un ejemplo real de ACID?
- 17. ¿Qué es un "encabezado privado" en C?
- 18. ¿Qué es un "grupo de captura independiente" regex?
- 19. FMJ Ejemplo de captura de cámara web
- 20. Captura de excepciones en el constructor
- 21. ¿Qué es un caso de uso para un constructor genérico?
- 22. ¿Qué es un constructor en Coq?
- 23. ¿Qué es "Expresión SFINAE"?
- 24. Java: la captura de excepciones específicas
- 25. ¿Qué es un ejemplo de objeto de valor en PHP?
- 26. ¿Qué es una expresión regular de prefijo?
- 27. ¿Por qué puedo llamar al constructor privado desde? Ámbito global?
- 28. Captura de errores de Java
- 29. ¿Qué es un ejemplo de un descuento no válido?
- 30. ¿Qué es un ejemplo de implementación de Hashtable en C#?
¿Es esta una buena idea para capturar el estado del objeto cuando el constructor se ejecuta y no ha terminado de ejecutarse aún? Me refiero a que el objeto podría estar en un estado incoherente? – Inquisitive
Downvoter: ¿Algún comentario? –
@Subhra: No estoy seguro de lo que estás preguntando. ¿Qué objeto podría estar en un estado inconsistente? –