我正在尝试检查用户帐户类型是否与多个 Strings
之一匹配。
关于这应该表示为每个条目包含不同字符串的 enum
还是表示为 Strings< 的
。虽然 Set
/Set
可能更有效,但枚举可能在风格上更胜一筹,因为它更清楚地用于逻辑流程。
这两种方法的优点是什么?
最佳答案
确实,Set<String>
在搜索时的性能方面更有效。但是,我不希望您有数千种帐户类型,而是有几种,因此您在搜索时实际上不会感觉到差异。但是,这种方法存在一个问题 - 您可以添加任何 String
到Set
,很脆。
我个人更喜欢使用 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/