为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要用枚举实现Singleton

为什么要用枚举实现Singleton

白板的微信 2019-02-19 16:12:24
为什么要用枚举实现Singleton
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

package singleton;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
//AprilCal on 2016.4.23
class Singleton//最普通的一种Singleton实现
{
private static Singleton INSTANCE=new Singleton();
private Singleton()
{
System.out.println("私有构造函数被调用");
}
public static Singleton getInstance()
{
return INSTANCE;
}
}
enum EnumSingleton2//枚举实现的Singleton
{
INSTANCE;
private EnumSingleton2()
{
System.out.println("enum 私有构造函数被调用");
}
}
public class SingletonTest
{
public static void main(String[] args)
throws ClassNotFoundException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException,
NoSuchMethodException, SecurityException, InstantiationException
{
Class <?> cls1 = Class.forName("singleton.Singleton");
Class <?> cls2 = Class.forName("singleton.EnumSingleton2");
//通过反射调用Singleton的构造函数
Constructor <?> c0=cls1.getDeclaredConstructor();
c0.setAccessible(true);
Singleton s=(Singleton)c0.newInstance();
//通过反射调用EnumSingleton的构造函数
Constructor <?> c1=cls2.getDeclaredConstructor();
c1.setAccessible(true);
EnumSingleton es=(EnumSingleton)c1.newInstance();
}
}



查看完整回答
反对 回复 2019-03-02
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

单例模式实现方式有很多:在第一次使用的时候创建(构造函数中判断是否已经有实例存在),在类加载的时候用静态块儿创建(静态块初始化),在应用启动的时候创建。 在单线程中,基本大同小异,保证类的实例在整个应用中只有一个,都是没问题的。

查看完整回答
反对 回复 2019-03-02
  • 2 回答
  • 0 关注
  • 602 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信