gpt4 book ai didi

java - 什么是枚举,它们为什么有用?

转载 作者:IT老高 更新时间:2023-10-28 12:14:50 26 4
gpt4 key购买 nike

今天我浏览了这个网站上的一些问题,发现提到了一个 enum being used in singleton pattern关于这种解决方案的所谓线程安全优势。

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

现在为什么我应该在日常编程中使用枚举以及什么?

最佳答案

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

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

顺便说一句,过度使用枚举可能意味着你的方法做得太多(最好有几个单独的方法,而不是一个方法需要几个标志来修改它的作用),但是如果你必须使用标志或类型代码,枚举是要走的路。

举个例子,哪个更好?

/** 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);

不可能了。

关于java - 什么是枚举,它们为什么有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4709175/

26 4 0