java - 使用枚举而不是集合的好处

标签 java enums

我正在尝试检查用户帐户类型是否与多个 Strings 之一匹配。

关于这应该表示为每个条目包含不同字符串的 enum 还是表示为 Strings< 的 Set/。虽然 Set 可能更有效,但枚举可能在风格上更胜一筹,因为它更清楚地用于逻辑流程。

这两种方法的优点是什么?

最佳答案

确实,Set<String>在搜索时的性能方面更有效。但是,我不希望您有数千种帐户类型,而是有几种,因此您在搜索时实际上不会感觉到差异。但是,这种方法存在一个问题 - 您可以添加任何 StringSet ,很脆。

我个人更喜欢使用 enum ,尤其是如果您不期望会引入更多帐户类型。如果您有 Set<AccountType>您将受到可以添加的值的限制(即您将能够添加only 帐户类型,但不能添加任何内容,例如使用 Set<String> 的方法)。这种方法的问题是 Open/Closed Principle - 考虑你有一个 switch关于 AccountType 的声明所有对应的变量case s。那么,如果你介绍一个新的 AccountType常数,您必须更改 switch声明(添加一个新的 case ),它打破了“开放/封闭原则”。在这种情况下,最简洁的设计是有一个 abstract class/interface , 称为 AccountType它具有所有特定帐户类型作为子类。

因此,您可以采用多种方法,但在选择一种方法之前,您应该尝试回答自己的问题:“我们将如何使用它?”

关于java - 使用枚举而不是集合的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31513986/

相关文章:

python - 如何使用python在机器人框架中导入和使用用户定义的枚举类

c# - Swashbuckle SchemaFilter 用于 api 操作参数

java - apache mina sshd 验证客户端签名

带有 Spring Boot 执行器和 Tomcat 的 java.lang.StackOverflowError

java - Spring循环依赖,

java - 填充所有状态值的摘要计数

java.lang.NumberFormatException : null java. lang.Integer.parseInt(来源未知)

java - 如何使用 pojo 从数据存储中检索实体?

python - 如何在 Cython 中包装匿名枚举并为其命名?

java - 根据输入的枚举值返回一个转换对象