gpt4 book ai didi

java - 什么时候在 java 中使用 Enum 类?

转载 作者:行者123 更新时间:2023-11-30 06:40:01 24 4
gpt4 key购买 nike

这可能是非常明显的问题,但是如果您知道值列表会不断增加,那么使用 Enum 类是否好?

假设您首先定义一个事件枚举,它只包含 [Poo, Too] 然后我们知道我们总是有一些新要求它变成 [Poo, Too, App, Laa] 并且不断变化,

那么在这种情况下最好的方法是什么?

最佳答案

tl;dr

  • 如果整个可能值集在编译时已知,使用枚举
  • 如果在您的系统正在使用时(在运行时)可以添加或删除值,那么您不能使用枚举。请改用 SetListMap

编译时已知

当域(所有可能值的集合)在编译时已知时,枚举是合适的。

如果今年贵公司提供两种产品(Poo 和 Too),则为这两个元素创建一个枚举。

public enum Product { POO , TOO }

明年,您的公司决定通过添加 App & Laa 来扩大产品供应。作为计划部署的一部分,向您的枚举中再添加两个对象。

public enum Product { POO , TOO , APP , LAA }

顺便说一下,请注意命名约定。枚举有一个常规的类名(初始上限)。自动实例化的对象是常量,因此以全大写命名。

此外,请注意 Java 中的枚举功能非常灵活且功能强大,比大多数语言中常见的命名数字枚举方案要灵活得多。您可以在 Java 枚举上拥有成员变量、方法和构造函数。例如,您可以添加一个 getDisplayName 方法来提供比全部大写的对象名称更适合用户界面的文本,如 DayOfWeek::getDisplayName 中所示。 .您可以添加相当多的功能,例如 ChronoUnit.between .

在 Java 中使用枚举在运行时不能做的是添加或删除对象。因此要求您在编译时知道您的域。但是,在处理一组枚举对象时,您可以使用高度优化的 EnumSetEnumMap类。

运行时已知

如果您无法在编译时确定域,如果用户可以在运行时添加或删除元素,则使用 collection例如 ListSetMap 而不是枚举。


单例

虽然最初不是为了 Enum 的目的在 Java 中,枚举恰好是实现 Singleton 的最安全(也是最简单)的方式。设计模式。

Joshua Bloch 博士等人在著名的 Effective Java 一书中解释了这种单例方法。使用枚举解决了其他单例方法的多个晦涩技术问题。

关于java - 什么时候在 java 中使用 Enum 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59022597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com