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反射调用”,但是我调用方法成功了,证明别人说的是错的。
本文通过示例展示了如何在Java中使用枚举实现单例模式,并通过反射成功调用其read和write方法,反驳了某些博客关于枚举类型单例不能被反射调用的说法。
308

被折叠的 条评论
为什么被折叠?



