public enum ShengChengWenJian { INSTANCE { @Override protected void read() { System.out.println("readreadreadreadreadreadreadreadread"); } @Override protected void write() { System.out.println("writewritewritewritewritewritewritewrite"); } }; protected abstract void read(); protected abstract void write(); }
Class<?> singletonClass = ShengChengWenJian.class; // 获取枚举常量 INSTANCE 的 Field 对象 Object singletonInstance = ShengChengWenJian.INSTANCE; // 获取 read 方法 Method readMethod = singletonClass.getDeclaredMethod("read"); // 获取 write 方法 Method writeMethod = singletonClass.getDeclaredMethod("write"); // 设置方法的访问权限 readMethod.setAccessible(true); writeMethod.setAccessible(true); // 使用反射调用 read 方法 readMethod.invoke(singletonInstance); // 使用反射调用 write 方法 writeMethod.invoke(singletonInstance);
看到其它博客中说“枚举类型的单例模式不会被被java反射调用”,但是我调用方法成功了,证明别人说的是错的。