Qualcuno può spiegarmi l'idioma di acquisizione del costruttore privato con un esempio e indicare dove è effettivamente necessario/non è necessario questo tipo di progettazione?Che cos'è un esempio Java dell'idioma "acquisizione del costruttore privato"?
risposta
L'obiettivo è quello di acquisire un valore temporaneo durante la costruzione.
Un esempio è dato in Solution 53 Java Puzzlers:
public class MyThing extends Thing {
private final int arg;
public MyThing() {
this(SomeOtherClass.func());
}
private MyThing(int i) {
super(i);
arg = i;
}
}
In questo caso, vogliamo catturare e memorizzare il parametro che vogliamo passare al costruttore della superclasse. Per fare ciò, creiamo un costruttore di helper privato, che il nostro costruttore pubblico chiama.
Una spiegazione viene fornita con un esempio in Java Concurrency In Practice capitolo 4 sezione 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;
}
}
Il costruttore privato esiste per evitare la condizione di competizione che si verificherebbe se il costruttore di copia sono state attuate come questo (p.x, p.y).
Che cosa vuol dire è, se non si dispone di un costruttore privato e di implementare costruttore di copia in modo seguente:
public SafePoint(SafePoint p) {
this(p.x, p.y);
}
Ora supponiamo che il thread A sta avendo l'accesso ai safepoint p è l'esecuzione sopra il costruttore della copia, questa istruzione (px, py) e allo sfortunato tempo un altro thread B che ha anche accesso a SafePoint p esegue setter set (int x, int y) sull'oggetto p. Dal momento che il costruttore di copie accede s' px e y variabile istanza direttamente senza adeguato bloccaggio potrebbe vedere stato incoerente dell'oggetto p.
Dove come il costruttore privato sta accedendo variabili s' px e y attraverso getter che è sincronizzato in modo che siano garantiti per vedere stato coerente dell'oggetto p.
- 1. privato costruttore
- 2. Java Spring bean con costruttore privato
- 3. Come testare un costruttore privato in applicazione Java?
- 4. Uso del costruttore privato nella classe
- 5. Documentare un costruttore privato con JSDoc
- 6. classe astratta vs costruttore privato
- 7. Costruttore privato e costruttore parametri pubblici
- 8. Una classe può avere un costruttore sia pubblico che privato?
- 9. JaCoCo e copertura mancante del costruttore privato predefinito
- 10. Un costruttore eliminato deve essere privato?
- 11. Ereditarietà del costruttore Java?
- 12. Come istanziare un oggetto con un costruttore privato in C#?
- 13. Costruttore privato sull'entità POCO che impedisce il caricamento lento
- 14. Il costruttore privato Scala class di classe non è privato
- 15. estende della classe con il costruttore privato
- 16. Esempio di acquisizione di FMJ Webcam
- 17. Costruttore privato e protetto in Scala
- 18. acquisizione di attributi del proprietario del file/proprietario in Java
- 19. Che tipo di chiamata del costruttore Java è questa?
- 20. vector :: emplace_back per oggetti con un costruttore privato
- 21. Perché un costruttore di classe base privato risulta in "Costruttore super implicito non visibile"
- 22. Una variabile che non è pubblico o privato-Java
- 23. C++ 11 costruttore di default privato
- 24. fare un abstract di classe vs rendere il costruttore privato
- 25. Creazione di una classe con un costruttore privato in F #
- 26. Posso usare boost :: make_shared con un costruttore privato?
- 27. È un costruttore di spostamento privato per impedire lo spostamento?
- 28. Quali sono le differenze tra un enum Java e una classe con il costruttore privato?
- 29. Confusione nel costruttore Sovraccarico Esempio
- 30. Prevenire la chiamata di un costruttore privato all'interno della classe in Java
Questa è una buona idea per acquisire lo stato dell'oggetto quando il costruttore è in esecuzione e non ha ancora completato l'esecuzione? Voglio dire che l'oggetto potrebbe trovarsi in uno stato incoerente? – Inquisitive
Downvoter: eventuali commenti? –
@ Subhra: non sono sicuro di cosa stai chiedendo. Quale oggetto potrebbe essere in uno stato incoerente? –