A volte può essere utile utilizzare una classe che contiene solo metodi statici e campi statici.
Ad esempio, è possibile utilizzare classi di utilità come java.lang.Math, java.util.Arrays, che raggruppano metodi relativi alle operazioni matematiche o agli array. Oppure, si può utilizzare java.util.Collections per raggruppare metodi statici di fabbrica (static factory method) che creano oggetti che implementano una specifica interfaccia.
Queste classi di utilità non richiedono variabili o metodi di istanza, quindi non hanno bisogno di un costruttore. Tuttavia, se non si definisce un costruttore, il compilatore crea automaticamente un costruttore pubblico predefinito. Di conseguenza, l'utente non può distinguere se il costruttore è stato creato automaticamente o meno.
Per evitare questo, a volte si utilizza una classe astratta, ma una classe astratta non impedisce l'istanzazione. È sufficiente creare una sottoclasse e istanziarla.
Pertanto, per impedire l'istanzazione di una classe di utilità, è necessario impostare il modificatore di accesso del costruttore su private.
Se il modificatore di accesso del costruttore predefinito è impostato su private, non è possibile accedervi dall'esterno della classe. Inoltre, se il costruttore predefinito viene chiamato internamente, si genera un'eccezione per impedirlo.
Questo costruttore privato può essere difficile da capire per chi lo utilizza, quindi è consigliabile aggiungere un commento esplicativo. Come nota a margine, l'impostazione del costruttore su private impedisce anche l'ereditarietà.
Commenti0