Java - 使用多个布尔属性作为标志

Java - Working with multiple Boolean attributes as flags

如果我的“MyObject”对象 class 有很多 'flags'(当前为 25 个),那么更有效和可维护(即更好)的方法是什么?

我的程序在概念上是围绕数学集合论设计的。因此,用户将查询多个集合 return 哪些 MyObjects 是这些集合的成员,主要使用集合的交集

这就是我苦苦挣扎的本质:

每个 MyObject 将有 25 个 'flags'。这些标志确定 MyObject 是否能够放入前面提到的集合之一。

我的问题是,如何对这些标志进行编程?

我已经被布尔值所吸引。这意味着任何查询或将 MyObject 添加到集合中,都可能取决于标志是开还是关、1 还是 0、真还是假。

例如,我想将五个 MyObjects 分配给一个名为 North 的集合。当每个 MyObject 都分配给该集合时,将执行检查以查找标志。如果标志是 negative/off/false,则不会分配对象,并显示错误消息 returned.

到目前为止,我使用的是布尔值。比方说,在构造函数中:

{

String "Attribute1"
String "Attribute2"
String "Attribute3"

Boolean flag1 = false
Boolean flag2 = false
Boolean flag3 = false
Boolean flag4 = false

}

稍后,我的方法之一允许用户 'add' 或翻转标志以反映 MyObject 获得该标志属性。例如:

public void flipFlag(true){
    this.flag == true;
}

到目前为止一切顺利。

这使我可以做我想做的事:如果 MyObjects 有正确的标志,则将它们添加到多个集合中。 但是当我想到这些标志上的其他操作时,问题就来了。将有 25 个,所以我希望能够在必要时迭代这些布尔值。我想尝试限制这个 'list' 标志被复制的次数,以便将来当我添加、删除或更改这些标志时,只有一两个地方可以编辑,而不是几十个(我目前需要一个单独的方法来翻转每个布尔值,因为我只能将 true、false 或 null 解析为方法参数)。

我还需要能够将标志迭代到 return True 标志集、False 标志集或两者。

我想我可能有一个布尔值的 HashMap,但事实证明这很难

在我的脑海中,我希望散列映射为:

Key : Value
flag1 : true
flag2 : false
flag3 : false

但事实并非如此。 任何帮助或指示表示赞赏。我在 Stack 上查看了许多类似的问题,但它们并没有提供我需要的答案。

非常感谢您的阅读。

为此目的,

Java 包含一个称为 BitSet 的标准 class。它是一系列布尔值的紧凑表示,通过 int 索引访问。通常使用它的方法是为父 class 中的索引定义常量或 enum 值。例如:

public static final int FLAG1 = 0;
public static final int FLAG2 = 1;
// ... and so on

private BitSet flags = new BitSet(25); // or however many flags you need

然后您可以通过以下方式访问各个标志:

flags.get(FLAG1);

将它们设置为:

flags.set(FLAG1, true);

或翻转它们(即反转值):

flags.flip(FLAG1);

还有许多其他可用的操作。查看 API 文档了解详细信息。