Opierając się na tym, co napisano w pytaniu SO Najlepsza implementacja singletona w Javie - a mianowicie o używaniu wyliczenia do tworzenia singletona - jakie są różnice / zalety / wady między (pominięto konstruktor)
public enum Elvis {
INSTANCE;
private int age;
public int getAge() {
return age;
}
}
a potem dzwonię Elvis.INSTANCE.getAge()
i
public enum Elvis {
INSTANCE;
private int age;
public static int getAge() {
return INSTANCE.age;
}
}
a potem dzwonię Elvis.getAge()
Ogromną zaletą jest sytuacja, gdy Twój singleton musi implementować interfejs. Idąc za twoim przykładem:
public enum Elvis implements HasAge { INSTANCE; private int age; @Override public int getAge() { return age; } }
Z:
public interface HasAge { public int getAge(); }
Nie da się tego zrobić ze statyką ...
źródło
(Stanowe) Singletony są zwykle używane do udawania, że nie używają zmiennych statycznych. Jeśli w rzeczywistości nie używasz publicznie statycznej zmiennej, oszukasz mniej ludzi.
źródło
Wybrałbym opcję, która jest najprostsza i najbardziej przejrzysta. Jest to nieco subiektywne, ale jeśli nie wiesz, co jest najjaśniejsze, wybierz najkrótszą opcję.
źródło