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

2022-09-02 02:52:20

我正在尝试检查用户帐户类型是否与几个.Strings

办公室里一直存在争议,关于这是否应该表示为每个条目包含不同字符串的,还是作为 .虽然可能更有效,但枚举在风格上可能更优越,因为它更清楚地用于逻辑流。enumSetStringsSet

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


答案 1

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

我个人更喜欢使用 ,特别是如果您不希望引入更多的帐户类型。如果你有 一个,你将被限制你可以添加的值(即,你将能够添加帐户类型,但不能添加任何东西,就像使用a的方法一样)。这种方法的问题是开放/封闭原则 - 假设你对一个变量有一个语句,其中包含所有相应的s。然后,如果引入一个新常量,则必须更改语句(添加一个新),这打破了“打开/关闭原则”。在这种情况下,最整洁的设计是使用一个 /,调用它,将所有特定的帐户类型作为子类。enumSet<AccountType>Set<String>switchAccountTypecaseAccountTypeswitchcaseabstract classinterfaceAccountType

因此,您可以遵循几种方法,但在选择一种方法之前,您应该尝试回答“我们将如何使用它”的问题。


答案 2

枚举会更好,因为帐户类型(通常)不会动态变化。此外,使用枚举使类型更加精确 - 例如,没有办法与帐户类型混淆。"Hello, World!"