Qual é a melhor abordagem para a utilização de um Enum como um singleton em Java?

StackOverflow https://stackoverflow.com/questions/427902

  •  06-07-2019
  •  | 
  •  

Pergunta

Com base no que foi escrito, na questão Melhor Singleton Implementação Em Java - saber sobre o uso de um enum para criar um singleton - quais são as diferenças/vantagens/desvantagens entre (construtor omitido)

public enum Elvis {
    INSTANCE;
    private int age;

    public int getAge() {
        return age;
    }
}

e, em seguida, chamar Elvis.INSTANCE.getAge()

e

public enum Elvis {
    INSTANCE;
    private int age;

    public static int getAge() {
        return INSTANCE.age;
    }
}

e, em seguida, chamar Elvis.getAge()

Foi útil?

Solução

Suponha que você seja vinculativo a algo que usará as propriedades de qualquer objeto que ele tenha - você pode passar por Elvis.Instance com muita facilidade, mas não pode passar por Elvis.class e esperar que ela encontre a propriedade (a menos que seja deliberadamente codificada para encontrar propriedades estáticas das classes).

Basicamente, você só usa o padrão de singleton quando você querer uma instância. Se os métodos estáticos funcionarem bem para você, basta usá -los e não se preocupe com a enumeração.

Outras dicas

Uma grande vantagem é quando o seu singleton deve implementar uma interface. Seguindo o seu exemplo:

public enum Elvis implements HasAge {
    INSTANCE;
    private int age;

    @Override
    public int getAge() {
        return age;
    }
}

Com:

public interface HasAge {
    public int getAge();
}

Não pode ser feito com estática ...

(Stateful) Singletons são geralmente usados para fingir não estar utilizando variáveis estáticas.Se você não usar o publicamente estática variável, em seguida, você vai enganar as pessoas menos.

Eu escolheria a opção que é a mais simples e clara. Isso é um pouco subjetivo, mas se você não souber o que é mais claro, basta optar pela opção mais curta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top