From f458bf7676e43b9b1d80aea02ed003e46e2e8289 Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Wed, 4 Nov 2026 22:39:59 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=20=20-=20=E5=8D=95=E4=BE=8B.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按《Effective Java》原文调整对枚举单例的表述。 --- notes/设计模式 - 单例.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/设计模式 - 单例.md b/notes/设计模式 - 单例.md index cc26937b..19df5237 100644 --- a/notes/设计模式 - 单例.md +++ b/notes/设计模式 - 单例.md @@ -186,7 +186,7 @@ java.lang.IllegalArgumentException: Cannot reflectively create enum objects 该实现在多次序列化和反序列化之后,不会得到多个实例。这是因为枚举常量序列化时只写入它的名字,反序列化时用 Enum.valueOf() 按名字找回已有的常量,这个过程不能自定义。而其它实现要实现 Serializable,反序列化时每次都会创建一个新对象,需要提供 readResolve() 方法返回已有的实例来替换它;transient 只决定字段是否参与序列化,不能保证实例唯一。 -这几种写法中,《Effective Java》推荐单元素的枚举,它同时挡住了反射和反序列化;枚举不能继承其它类,单例需要继承某个父类时,用静态内部类实现。 +这几种写法中,《Effective Java》认为单元素的枚举通常是实现单例的最好方式,它同时挡住了反射和反序列化;枚举不能继承其它类,单例需要继承某个父类时,用静态内部类实现。 ### 示例 - 日志类;