为什么使用枚举创建单例?
为什么要用枚举类型实现单例模式?
资料学习:
(1)避免反射攻击
public T newInstance(Object ... initargs)
throws InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException
{
if (!override) {
if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
Class<?> caller = Reflection.getCallerClass();
checkAccess(caller, clazz, null, modifiers);
}
}
if ((clazz.getModifiers() & Modifier.ENUM) != 0)
throw new IllegalArgumentException("Cannot reflectively create enum objects");
ConstructorAccessor ca = constructorAccessor; // read volatile
if (ca == null) {
ca = acquireConstructorAccessor();
}
@SuppressWarnings("unchecked")
T inst = (T) ca.newInstance(initargs);
return inst;
}
当尝试利用反射创建枚举类型的实例时,源码判断,抛出异常(第11行)
(2)避免反序列化
//TODO
Don't just do it. Show me your Blog. 语雀地址 : https://www.yuque.com/bigbeardhk/java

浙公网安备 33010602011771号