Effective Java 2nd 将 Enum Implementation 描述为在Java中实现Singleton的最佳实践。
但该实现对静态持有者实现的优势在于enum
可以防止反射攻击。
所以,有一个问题:为什么我们需要防止单身人士的反思攻击?
Java Singleton的其他实现只是解决了多线程和延迟初始化的问题。
这些问题将经常出现在日常开发中,但反射攻击似乎更像是一个安全问题。
如果攻击者可以攻击并破解你的程序,他和她可以做任何他想做的事情,似乎没有必要打破单身人士。
答案 0 :(得分:2)
@Wafer Li,理论上反思可以创建非enum
单例的第二个实例,因此可以反序列化。这些不是"攻击"但客户端代码可以打败单身的方式。 API编写的整个点是为了保证记录的行为。如果一个人在保证中留下如此巨大的漏洞,为什么还要单独写一个单身?
此外,懒惰的单例初始化是没用的。无意义。静态持有者是多余的,只是一大堆代码。
那么为什么要为单身人士抵制简单,优雅,完全实施,标准,最佳实践enum
?
为什么?