枚举本身是一个Class类
要知道反射是不能破坏枚举的单例的,但是现在我们可以尝试一下
public enum EnumSingle{
INSTANCE;
public EnumSingle getInstance(){
return INSTANCE;
}
}
public class Test{
public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
EnumSingle instance1 = EnumSingle.INSTANCE;
//这里需要注意的是不要写成Integer.class,这里的int.class是确定的
Constructor<EnumSingle> declaredConstructor = EnumSingle.class.getDeclaredConstructor(String.class,int.class);
//破除私有权限
declaredConstructor.setAccessible(true);
EnumSingle instance2 = declaredConstructor.newInstance();
System.out.println(instance1);
System.out.println(instance2);
}
}
这样抛出来的异常就是
你会发现反射确实不能创建枚举的单例。
注意枚举中没有无参构造,而是有两个参数(String,int)