使用枚举实现实用程序类和单例

Ric*_*ich 8 java enums

Peter Lawrey撰写了大多数人在他的博客上遗忘的两个Enums of Enums.

首先,我没有忘记 - 我甚至没有意识到:)

这些方法简洁明了 - 与更传统的实现相同方法的方法相比,除了简洁之外还有什么好处,比如使用final带有private实用程序类构造函数的类?

此外,是否有任何问题(除了令人困惑的程序员不期待它)?

Bri*_*new 9

这似乎更直观,我使用enums真正的枚举.


Col*_*inD 6

我真的不同意enum该帖子中对的首次使用。如果您想要一个无法实例化的实用程序类,只需为其提供一个私有构造函数。就这么简单,并且在enum我看到的情况下并没有提供任何额外的好处。

实用程序类中单例的枚举使用很棒,但是我通常会尝试保留一个事实,enum即正在使用an内部实现细节。例如,请参见Guava的Predicates类,该类使用enum来强制某些Predicatelike 的单个实例alwaysTrue()。但是,它不会enum向用户公开。

至于其他好处:是的,还有其他好处,例如内置的可序列化性和enum每个类加载器绝对强制使用一个常量实例,即使在反序列化时也是如此。