0
点赞
收藏
分享

微信扫一扫

枚举enum与反射

前行的跋涉者 2022-04-24 阅读 98
单例模式

枚举本身是一个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)

举报

相关推荐

枚举Enum

枚举enum

enum枚举

Enum枚举类

java枚举(enum)

0 条评论