diff --git a/docs/notes/89. 对于实例控制,枚举类型优于 readResolve.md b/docs/notes/89. 对于实例控制,枚举类型优于 readResolve.md index 9ea9fc7..7607981 100644 --- a/docs/notes/89. 对于实例控制,枚举类型优于 readResolve.md +++ b/docs/notes/89. 对于实例控制,枚举类型优于 readResolve.md @@ -112,7 +112,7 @@ public class ElvisImpersonator {   通过将 `favoriteSongs` 字段声明为 `transient`,可以修复这个问题,但是最好把 `Elvis` 做成一个单元素的枚举类型(详见第 3 条)。就如 `ElvisStealer` 攻击所示范的,用 `readResolve` 方法防止“临时”被反序列化的实例收到攻击者的访问,这种方法十分脆弱需要万分谨慎。 -  如果将一个可序列化的实例受控的类编写为枚举,Java 就可以绝对保证出了所声明的常量之外,不会有其他实例,除非攻击者恶意的使用了享受特权的方法。如 `AccessibleObject.setAccessible`。能够做到这一点的任何一位攻击者,已经拥有了足够的特权来执行任意的本地代码,后果不堪设想。将 Elvis 写成枚举的例子如下所示: +  如果将一个可序列化的实例受控的类编写为枚举,Java 就可以绝对保证除了所声明的常量之外,不会有其他实例,除非攻击者恶意的使用了享受特权的方法。如 `AccessibleObject.setAccessible`。能够做到这一点的任何一位攻击者,已经拥有了足够的特权来执行任意的本地代码,后果不堪设想。将 Elvis 写成枚举的例子如下所示: ```java // Enum singleton - the preferred approach public enum Elvis {