Nie jestem ekspertem, ale wydaje mi sie, że można to rozumieć w ten sposób:
public class Main {
public static void main(String[] args) {
System.out.println(TestEnum.TEST); // TEST
System.out.println(TestEnum.TEST.test()); // Enum Test
System.out.println(TestEnumClass.TEST); // TEST
System.out.println(TestEnumClass.TEST.test()); // Enum Test Clas
}
}
enum TestEnum {
TEST;
public static String test() {
return "Enum Test";
}
}
class TestEnumClass {
public static final TestEnumClass TEST = new TestEnumClass() {
@Override public String toString() {
return "TEST";
}
};
public static String test() {
return "Enum Test Class";
}
}
Dlatego możesz wywołać sobie metodę na zwróconej instancji. Gdybyś dodał kolejne ABCD i zrobił get to:
public class Main {
public static void main(String[] args) {
final Singleton s = Singleton.getInstance();
final Singleton abcd_s = Singleton.getInstance();
System.out.println(s.getConnection());
System.out.println(abcd_s.getConnection());
}
}
enum Singleton
{
INSTANCE, ABCD;
// instance vars, constructor
private final String connection;
Singleton()
{
// Initialize the connection
connection = "returning conneciton...";
}
// Static getter
public static Singleton getInstance()
{
return INSTANCE;
}
// Static getter
public static Singleton getABCD()
{
return ABCD;
}
public String getConnection()
{
return connection;
}
}
da ci :
returning conneciton...
returning conneciton...
Jak dobierasz się do INSTANCE to jest wywoływany konstruktor.
public class Main {
public static void main(String[] args) {
System.out.print(Singleton.INSTANCE);
}
}
enum Singleton
{
INSTANCE;
Singleton()
{
System.out.println("Hello constructor");
}
// Static getter
public static Singleton getInstance()
{
return INSTANCE;
}
}
// Hello constructor
// INSTANCE