我试图检查一个用户帐户类型是否与几个Strings中的一个匹配。
在办公室中,对于这是应该表示为包含不同字符串的每个条目的enum还是以Set of Strings表示的问题,存在争论。虽然Set可能更有效率,但枚举在风格上可能更优越,因为它更清楚地被用于逻辑流。
这两种方法的优点是什么?
发布于 2015-07-20 10:23:16
实际上,在搜索时,Set<String>在性能方面更有效。但是,我不会期望您有数千个帐户类型,但是有几个,所以您在搜索时不会真正感受到这种差异。但是,这种方法有一个问题--您可以将任何String添加到Set中,这是很脆弱的。
我个人更喜欢使用enum,特别是如果不希望引入更多的帐户类型的话。如果您有一个Set<AccountType>,您将受到限制,您可以添加的值(即,您将能够添加只帐户类型,而不是任何东西,如与Set<String>的方法)。这种方法的问题在于开放/封闭原则 --假设在一个AccountType变量上有一个switch语句,其中包含所有对应的case。然后,如果引入新的 AccountType常量,就必须更改switch语句(添加一个新的case),这违反了“开放/封闭原则”。在这种情况下,最简洁的设计是有一个名为abstract class/interface的AccountType,它将所有特定的帐户类型作为子类。
因此,有几种方法你可以遵循,但在选择之前,你应该尝试回答自己的问题,“我们将如何使用它?”
发布于 2015-07-20 10:22:42
枚举会更好,因为帐户类型(通常)不会动态更改。此外,使用枚举可以使类型更加精确--例如,没有办法将"Hello, World!"与帐户类型混淆。
发布于 2015-07-20 10:24:50
Enum是很棒的,因为您可以得到编译时检查。无效的值根本不会编译,所以它会“快速失败”。
当您想要添加另一个选项而不编译/发布应用程序的新版本时,字符串集合是很好的。例如,如果在数据库表中配置了有效选项。
https://stackoverflow.com/questions/31513986
复制相似问题