![translation](https://cdn.durumis.com/common/trans.png)
Esta é uma postagem traduzida por IA.
Selecionar idioma
Texto resumido pela IA durumis
- When creating a utility class that contains only static methods and fields, you should make the constructor private to prevent instantiation.
- This prevents the constructor from being called from outside the class, and allows you to explicitly control the public default constructor generated by the compiler.
- A private constructor makes inheritance impossible, restricting the intentional use of utility classes and improving code readability.
Às vezes, usar uma classe que contém apenas métodos estáticos e campos estáticos pode ser útil.
Um exemplo típico é usar classes de utilitário, como java.lang.Math, java.util.Arrays, que contêm métodos relacionados a operações matemáticas ou arrays. Ou, pode agrupar métodos estáticos de fábrica que criam objetos que implementam uma determinada interface, como java.util.Collections.
Essas classes de utilitário podem ser usadas sem variáveis de instância ou métodos, então não requerem um construtor. No entanto, se um construtor não for declarado, o compilador cria automaticamente um construtor público padrão. Portanto, o usuário não consegue diferenciar se esse construtor foi criado automaticamente.
Para evitar isso, algumas pessoas fazem a classe ser abstrata, mas a classe abstrata não pode ser instanciada. Isso porque você pode apenas criar uma subclasse e instanciá-la.
public abstract class Person {
public static void speak(String message) {
System.out.println(message);
}
}
public class Student extends Person {
public Student() {
super();
}
Portanto, para impedir a instanciação da classe de utilitário, o modificador de acesso do construtor deve ser definido como privado.
public abstract class Person {
private Person() {
throw new AssertionError();
}
public static void speak(String message) {
System.out.println(message);
}
Se o modificador de acesso do construtor padrão for privado, como mostrado acima, ele não será acessível de fora da classe. Além disso, ele foi bloqueado para que uma exceção fosse lançada quando o construtor padrão fosse chamado internamente.
Um construtor privado pode ser difícil de entender para quem usa, então adicionar um comentário pode ser uma boa ideia. Observe que tornar o construtor privado torna a herança impossível.