我有一个“配置”类,它成为其他几个类的字段。它表示这些其他类允许或禁止操作的某种配置或“能力”。目前,配置类包含一组四个独立的布尔值,并且可能会保持这样--或者增加另一个布尔值。配置是不可变的:一旦创建了对象,配置就永远不会改变。
public class Configuration {
private final boolean abilityOne;
private final boolean abilityTwo;
private final boolean abilityThree;
private final boolean abilityFour;
public Configuration (final boolean abilityOne, final boolean abilityTwo,
final boolean abilityThree, final boolean abilityFour) {
this.configuration = ((1 * (abilityOne ? 1 : 0)) +
(2 * (abilityTwo ? 1 : 0)) +
(4 * (abilityThree ? 1 : 0)) +
(8 * (abilityFour ? 1 : 0)));
}
public boolean isAbilityOne() {
return((1 & this.configuration) > 0);
}
public boolean isAbilityTwo() {
return((2 & this.configuration) > 0);
}
public boolean isAbilityThree() {
return((4 & this.configuration) > 0);
}
public boolean isAbilityFour() {
return((8 & this.configuration) > 0);
}
}
因为我的C/硬件限制背景,我下一步的实现(试图减少内存占用)将使用一个
int
作为位图:1->第一个布尔值,2->第二个,4->第三个,8->第四个。这样,我只需存储一个整数,所需的布尔函数如下:它工作得很好,而且非常节省内存。但是我的同事们(他们一直使用Java)对此不太赞同。
不同配置的数量有限(布尔值的组合),但使用它们的对象数量非常大。为了降低内存消耗,我考虑了一些"多个单例"、枚举或缓存实例的方式。现在问题是什么方法最好?
equals
/hashCode
方法。 - Andy Turner