Com base no que foi escrito na questão SO, a melhor implementação de singleton em Java - especificamente sobre o uso de um enum para criar um singleton - quais são as diferenças / prós / contras entre (construtor omitido)
public enum Elvis {
INSTANCE;
private int age;
public int getAge() {
return age;
}
}
e então ligando Elvis.INSTANCE.getAge()
e
public enum Elvis {
INSTANCE;
private int age;
public static int getAge() {
return INSTANCE.age;
}
}
e então ligando Elvis.getAge()
Uma grande vantagem é quando seu singleton deve implementar uma interface. Seguindo 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 ...
fonte
(Stateful) Singletons geralmente são usados para fingir que não estão usando variáveis estáticas. Se você realmente não usar a variável publicamente estática, enganará menos pessoas.
fonte
Eu escolheria a opção mais simples e clara. Isso é um tanto subjetivo, mas se você não sabe o que é mais claro, escolha a opção mais curta.
fonte