![translation](https://cdn.durumis.com/common/trans.png)
Questo è un post tradotto da IA.
[Effective Java] Item 4. Utilizzare un costruttore privato per impedire l'istanziamento
- Lingua di scrittura: Coreana
- •
-
Paese di riferimento: Tutti i paesi
- •
- Tecnologia dell'informazione
Seleziona la lingua
Testo riassunto dall'intelligenza artificiale durumis
- Quando si crea una classe di utilità che contiene solo metodi e campi statici, è necessario rendere privato il costruttore per impedire l'istanziamento.
- Ciò impedisce l'invocazione del costruttore dall'esterno della classe e consente un controllo esplicito del costruttore pubblico predefinito generato dal compilatore.
- Un costruttore privato rende la classe non ereditabile, limitando l'utilizzo intenzionale della classe di utilità e migliorando la leggibilità del codice.
A volte è utile usare una classe che contiene solo metodi statici e campi statici.
Ad esempio, puoi usare classi di utilità come java.lang.Math, java.util.Arrays che raccolgono metodi relativi a operazioni matematiche o matrici. Oppure, puoi raggruppare metodi statici di fabbrica che creano oggetti che implementano una particolare interfaccia, come java.util.Collections.
Queste classi di utilità non richiedono alcun costruttore perché possono essere utilizzate senza variabili o metodi di istanza. Tuttavia, se non si specifica un costruttore, il compilatore crea automaticamente un costruttore pubblico predefinito. Pertanto, l'utente non può distinguere se questo costruttore è stato generato automaticamente.
Per evitarlo, a volte viene creata una classe astratta, ma una classe astratta non può essere istanziata. Puoi semplicemente creare una sottoclasse e istanziarla.
public abstract class Person {
public static void speak(String message) {
System.out.println(message);
}
}
public class Student extends Person {
public Student() {
super();
}
Pertanto, per impedire l'istanza di classi di utilità, è necessario impostare il modificatore di accesso del costruttore su privato.
public abstract class Person {
private Person() {
throw new AssertionError();
}
public static void speak(String message) {
System.out.println(message);
}
Come sopra, se il modificatore di accesso del costruttore predefinito è privato, non è possibile accedervi dall'esterno della classe. Inoltre, è stato impedito che il costruttore predefinito venisse chiamato internamente causando un'eccezione.
Questo costruttore privato può essere difficile da capire per gli utenti, quindi è una buona idea aggiungere un commento. Per inciso, bloccare il costruttore su privato ha anche l'effetto di rendere impossibile l'ereditarietà.