当前位置: 首页 > 面试题库 >

使用枚举实现实用工具类和单例

端木宏才
2023-03-14
问题内容

彼得·劳瑞在他的博客上写了关于枚举的两种用法,大多数人都忘记了。

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

这些方法很不错,简洁-是否有任何好处比其他简洁与实现同样的事情的更传统的方式,如使用比较final类与private构造函数工具类?

另外,是否有任何问题(除了使不期望的程序员感到困惑之外)?


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我维护着一个大型文档档案,并且在处理或验证它们时经常使用位字段来记录文档的状态。我的旧代码仅使用静态int常量,例如: 通过设置适当的标志,可以很容易地指示文档所处的状态。例如: 由于使用静态常量的方法是不好的做法,并且由于我想改进代码,因此我一直希望使用Enums来实现相同的目的。有一些要求,其中之一就是需要将状态作为数字类型保存到数据库中。因此,需要将枚举常量转换为数值。以下是我的

  • 本文向大家介绍Java枚举类用法实例,包括了Java枚举类用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java枚举类用法。分享给大家供大家参考。具体如下: 希望本文所述对大家的java程序设计有所帮助。

  • 我试图在Enum上做一点反向工程。 接口内的枚举实现-Java

  • 当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12 好处是简单,缺点是类型是int,并且仍然是变量。 更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能: from enum import Enum

  • 问题内容: 考虑我有以下枚举类, 在下面的课程中,我试图测试枚举类, 在这里,我指定然后将其作为参数传递给方法。相反,如果我们要实例化枚举类并将其作为参数传递,我们需要做什么? 问题答案: 在这里,我需要指定Sample.READ以将其作为参数传递。相反,如果我们要实例化枚举类并将其作为参数传递,我们需要做什么? “实例化枚举类”甚至意味着什么?枚举的要点是有一组 固定 的值-您以后不能创建更多值

  • 枚举类(“新的枚举”/“强类型的枚举”)主要用来解决传统的C++枚举的三个问题: 传统C++枚举会被隐式转换为int,这在那些不应被转换为int的情况下可能导致错误 传统C++枚举的每一枚举值在其作用域范围内都是可见的,容易导致名称冲突(同名冲突) 不可以指定枚举的底层数据类型,这可能会导致代码不容易理解、兼容性问题以及不可以进行前向声明 枚举类(enum)(“强类型枚举”)是强类型的,并且具有类