话不多说,直接上代码。
package com.ebiz.zyl;
public enum EnumSingleton {
INSTANCE;
private SingletonDemo1 singletonDemo1;
private EnumSingleton() {
singletonDemo1 = new SingletonDemo1();
}
public SingletonDemo1 getSingletonDemo1() {
return singletonDemo1;
}
}
package com.ebiz.zyl;
public class SingletonDemo1 {
public SingletonDemo1() {
System.out.println("gogogo");
}
public static void main(String[] args) {
SingletonDemo1 SingletonDemo1 = EnumSingleton.INSTANCE.getSingletonDemo1();
SingletonDemo1 SingletonDemo2 = EnumSingleton.INSTANCE.getSingletonDemo1();
SingletonDemo1 SingletonDemo3 = EnumSingleton.INSTANCE.getSingletonDemo1();
System.out.println(SingletonDemo1.hashCode());
System.out.println(SingletonDemo2.hashCode());
System.out.println(SingletonDemo3.hashCode());
}
}
枚举中明确了构造方法限制为私有,在访问枚举实例时会执行该构造方法,同时每个枚举实例都是static final的,说明只能被实例化一次。构造方法被调用时,我们的单例(类)被实例化。
也就是说,因为enum中的实例被保证只会被实例化一次,所以我们的INSTANCE也被保证实例化一次。