当我阅读有效的Java时,作者告诉我,单元素enum
类型是实现单例的最佳方法,因为我们不必考虑复杂的序列化或反射攻击。这意味着我们不能使用反射创建enum
的实例,对吗?
我已经使用enum
类进行了一些测试:
public enum Weekday {}
然后,我尝试创建
Weekday
的实例:Class<Weekday> weekdayClass = Weekday.class;
Constructor<Weekday> cw = weekdayClass.getConstructor(null);
cw.setAccessible(true);
cw.newInstance(null);
如您所知,它不起作用。当我将关键字
enum
更改为class
时,它可以工作。我想知道为什么。谢谢。 最佳答案
这是语言内置的。从Java Language Specification (§8.9):
这样做的全部目的是允许安全地使用==
来比较Enum
实例。
编辑:请参阅the answer by @GotoFinal,以了解如何使用反射方式打破此“保证”。
关于java - 如何在Java中使用反射创建枚举实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9614282/