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

Java 枚举是什么?它们为什么有用?

谭越
2023-03-14
问题内容

今天,我浏览了该站点上的一些问题,发现提到了enum 以单例模式使用的这种解决方案声称具有线程安全性的优点。

我从未使用过enums,并且使用Java编程已经有两年多了。显然,他们改变了很多。现在,他们甚至在自己内部提供了对OOP的全面支持。

现在为什么要在日常编程中使用枚举?为什么?


问题答案:

当变量(尤其是方法参数)只能从一小部分可能的值中取出一个时,应始终使用枚举。例如类型常量(合同状态:“永久”,“临时”,“学徒”)或标志(“立即执行”,“推迟执行”)。

如果使用枚举而不是整数(或字符串代码),则将增加编译时检查并避免错误传入无效常量,并记录哪些值是合法使用的。

顺便说一句,枚举的过度使用可能意味着您的方法做得太多(通常最好有几个单独的方法,而不是一个带有几个修改其功能的标志的方法),但是如果您必须使用标志或键入代码,则枚举是要走的路。

例如,哪个更好?

/** Counts number of foobangs.
 * @param type Type of foobangs to count. Can be 1=green foobangs,
 * 2=wrinkled foobangs, 3=sweet foobangs, 0=all types.
 * @return number of foobangs of type
 */
public int countFoobangs(int type)
与

/** Types of foobangs. */
public enum FB_TYPE {
 GREEN, WRINKLED, SWEET, 
 /** special type for all types combined */
 ALL;
}

/** Counts number of foobangs.
 * @param type Type of foobangs to count
 * @return number of foobangs of type
 */
public int countFoobangs(FB_TYPE type)

方法调用如下:

int sweetFoobangCount = countFoobangs(3);

然后变成:

int sweetFoobangCount = countFoobangs(FB_TYPE.SWEET);

在第二个示例中,可以立即清除允许哪些类型,文档和实现不能不同步,并且编译器可以强制执行此操作。另外,像

int sweetFoobangCount = countFoobangs(99);


 类似资料:
  • 问题内容: 在“ Python编程 ”中,提到了。我来自背景,以前没有听说过这个词。什么是? 在本示例的两行之间进行阅读(我已经链接了它,因为它很长),我认为这是使用多重继承来扩展类而不是“适当的”子类的一种情况。这是正确的吗? 为什么我要这样做而不是将新功能放入子类中?因此,为什么混合/多重继承方法比使用组合更好? 什么将mixin与多重继承分开?这仅仅是语义问题吗? 问题答案: 是一种特殊的多

  • 问题内容: 我是一名即将毕业的计算机科学专业的学生,​​在我的整个编码生涯中,我发现很少使用枚举的实例,除了典型的情况(例如代表标准纸牌的面孔)外,还使用了枚举。 您是否知道在日常编码中使用枚举的任何巧妙方法? 为什么枚举如此重要,在什么情况下应该能够确定建立枚举是最佳方法? 问题答案: 这些是主要的论点,以及短的例子。 的情况 从Java 6开始,是一个凌乱类的示例,该类可以从使用中受益匪浅(除

  • 问题内容: 所以,我看着这个“枚举”类型,并且它种好像一个华而不实的 数组 / / 给我。到底有什么用? 问题答案: 枚举是一种固定数量的常量,至少可以用于两件事 不变 这比创建一堆整数常量要好得多。 创建一个单例 您可以使用枚举来做一些有趣的事情,请看这里 也请看官方文档

  • 问题内容: 我对Maven快照的含义以及为什么要构建一个快照感到困惑。 问题答案: Maven中的快照版本尚未发布。 这个想法是,前一个版本(或任何其他版本)完成后,存在一个。那个版本可能会变成 。它基本上是“ 开发中”。这可能接近实际发行版,或相当遥远(0.9例如,发行后立即发行)。 “真实”版本和快照版本之间的区别在于快照可能会得到更新。这意味着今天下载的文件可能不同于昨天或明天下载的文件。

  • 问题内容: Java不允许枚举位于接口内部,但是默认情况下,接口内部的每个数据成员都是。有人可以澄清吗? 问题答案: 枚举不能是最终的,因为编译器将为程序员明确为其定义实现的每个枚举条目生成子类。 此外,根据JLS第8.9节,没有实例具有自己的类主体的枚举是隐式最终的。