我正在尝试检查用户帐户类型是否与其中一个匹配Strings.
有一个在办公室辩论是否这应该被表示为一个enum包含不同的字符串中的每个条目,或作为Set的Strings.虽然Set可能更有效,但枚举可能在风格上更优越,因为它更清楚地用于逻辑流程.
这两种方法有哪些优点?
Kon*_*kov 22
实际上,Set<String>在搜索时,a 在性能方面更有效.但是,我不希望你有几千个帐户类型,但有几个,所以你在搜索时实际上并没有感觉到差异.但是这种方法存在一个问题 - 你可以添加任何String一个Set,这是脆弱的.
我个人更喜欢使用enum,特别是如果你不希望引入更多的帐户类型.如果你有一个Set<AccountType>你会,你可以添加值的限制(例如,你可以添加只帐户类型,但没有任何东西,像一个办法Set<String>).这种方法的问题是开放/封闭原则 - 考虑你有一个带有所有相应s switch的AccountType变量的陈述case.然后,如果引入一个新的 AccountType常量,则必须更改该switch语句(添加一个新的case),这会打破"打开/关闭原则".在这种情况下,最新的设计是使用abstract class/ interface,调用AccountType将所有特定帐户类型作为子类.
因此,您可以遵循几种方法,但在选择之前,您应该尝试回答"我们将如何使用它?"的问题.
枚举非常棒,因为您可以进行编译时检查.无效的值根本无法编译,因此"快速失败".
如果要在不编译/发布应用程序的新版本的情况下添加其他选项,则字符串集合非常棒.例如,如果在数据库表中配置了有效选项.
| 归档时间: |
|
| 查看次数: |
1923 次 |
| 最近记录: |