Peter Lawrey在他的博客上写了关于
Two Uses of Enums that most people forget的内容.
首先,我没有忘记 – 我甚至没有意识到:)
这些方法简洁明了 – 与更传统的实现相同方法的方法相比,除了简洁之外还有什么好处,比如使用带有私有构造函数的final类来实现实用程序类?
此外,是否有任何问题(除了令人困惑的程序员不期待它)?
解决方法
我真的不同意该帖子中第一次使用enum.如果您想要一个不可实例化的实用程序类,只需给它一个私有构造函数.就是这么简单,在我看到的那种情况下,枚举没有提供额外的好处.
在实用程序类中使用枚举用于单例是很好的,但我通常会尝试保持枚举被用作内部实现细节的事实.例如,参见Guava的Predicates类,它使用枚举来强制执行某些谓词的单个实例,例如alwaysTrue().但它不会向用户公开枚举.
至于其他好处:是的,还有其他好处,例如内置的可串行化,并且每个类加载器绝对强制执行枚举常量的单个实例,即使在反序列化时也是如此.