【发布时间】:2021-10-10 14:13:21
【问题描述】:
让我的“MyObject”对象类拥有许多“标志”(目前为 25 个),有什么更有效和可维护(即更好)的方法?
我的程序在概念上围绕数学集合论。因此,用户将查询多个集合以返回哪些 MyObjects 是这些集合的成员,主要使用集合的交集
这就是我苦苦挣扎的本质:
每个 MyObject 将有 25 个“标志”。这些标志确定 MyObject 是否能够放入前面提到的集合之一中。
我的问题是,如何对这些标志进行编程?
我倾向于布尔值。这意味着任何查询或将 MyObject 添加到集合中,都取决于标志是 On 还是 Off、1 还是 0、True 或 False。
例如,我想将五个 MyObject 分配给一个名为 North 的集合。由于每个 MyObject 都分配给该集合,因此将执行检查以查找标志。如果标志为负/关闭/假,则不会分配对象,并返回错误消息。
到目前为止,我使用了布尔值。例如,在构造函数中:
{
String "Attribute1"
String "Attribute2"
String "Attribute3"
Boolean flag1 = false
Boolean flag2 = false
Boolean flag3 = false
Boolean flag4 = false
}
稍后,我的一种方法允许用户“添加”或翻转标志以反映 MyObject 获得该标志属性。例如:
public void flipFlag(true){
this.flag == true;
}
到目前为止一切顺利。
这让我可以做我想做的事:如果 MyObjects 具有正确的标志,则将它们添加到多个集合中。 但是当我考虑对这些标志的其他操作时,问题就来了。其中将有 25 个,所以我希望能够在必要时迭代这些布尔值。我想尝试限制复制此标志“列表”的次数,以便将来当我添加、删除或更改这些标志时,有一个或两个位置可以编辑,而不是几十个(我目前需要一个单独的方法来翻转每个布尔值,因为我只能将 true、false 或 null 解析为方法参数)。
我还需要能够遍历标志以返回一组 True 标志、一组 False 标志或两者。
我认为我可能有一个布尔值的 HashMap,但事实证明这很困难
在我的脑海中,我希望哈希映射是:
Key : Value
flag1 : true
flag2 : false
flag3 : false
但这似乎不是它的工作方式。 任何帮助或指针表示赞赏。我在 Stack 上查看了许多类似的问题,但它们并没有完全提供我需要的答案。
非常感谢您的阅读。
【问题讨论】:
-
你如何决定标志的总数(构建与运行时)?检查是如何进行的?调用者是否知道对象中的所有标志?
-
标志总数不应在软件更新之外改变(事实上,极少如此),因此,在构建时。检查会经常发生,因为用户会定期将 MyObjects 分配给不同的 Set,并且他们会知道所有的标志,它们最终会在 GUI 中轻松访问。
-
如果是构建时间,
HashMap<Feature,Boolean>Feature是一个枚举呢?这可能会带来更多“严格” -
我将研究枚举,因为这也向我提出了建议。我认为@tim-moore 的答案将满足我的所有需求,但我仍将研究涉及 enum 的解决方案。谢谢。