使用复合值进行枚举是否合适:
private enum SomeEnum {
A, B, A_AND_B, NEITHER;
}
我觉得它应该具有类似XOR的逻辑,应该只包含基本单位值。如果以某种方式需要使用A&amp; B在一起,应该在List<SomeEnum>
。我的想法是正确的,还是有缺陷的。你能告诉我一些这方面的细节吗?
答案 0 :(得分:1)
您询问了有关使用某种方法或其他方法更合适的原因的详细信息。这取决于你打算用有问题的枚举做什么,以及它是否可能改变。
如果有可能有一天除了A
和B
之外还有其他选择,那么使用Set显然更“合适”(EnumSet是最有效的实现,因为其他人在这里已经指出),因为否则你可能会创建一个未来的bug。
否则,对于您引用的具体案例,适用的原则可能是YAGNI。这是最简单的方法,并在你有时间的时候改进它。
更一般地说,代码的复杂性和可读性存在问题。如果只有4种可能性,我认为使用Set
不会使代码更具可读性,并且它使它更简单(特别是如果值必须传递到数据库和从数据库传递)。
但是,如果价值不仅仅是A
和B
,那么Set
方法显然更优越。 Set
方法的优点是代码的复杂性不会随着可能值的数量而增加。另一方面,拼写出枚举中的所有组合变得越来越多,每个附加值(组合数量的增加的因子顺序)都是爆炸性的混乱,随着遗漏错误的风险增加。如果你想将数据与每个枚举值相关联,通过构造函数传入,它就会变得更加混乱。
答案 1 :(得分:0)