Association Object-Enum,哪个更高效?

时间:2017-05-12 11:46:45

标签: java arrays enums boolean

我们说我有以下枚举:

public enum Example{

A,
B,
C,
D,
E;

}

我需要一个Object和上面的枚举之间的关联。 在我的特定情况下,一个对象必须只有一个Example关联,但Example.BExample.C除外,因为一个Object最终可能有这两个关联。

现在我的解决方案是:我创建了一个五个布尔值的对象包装器,每个布尔值代表一个枚举。如果它为真,则表示与表示的示例常量有关联。

最后,我在Object和Wrapper之间建立了关联。 问题在于我认为没有必要随身携带这五个布尔值,因为在大多数情况下只有布尔值才是真的,在极少数情况下只有两个布尔值是真的。但绝不会超过两个。

然后我认为对象和ArrayList<Example>之间的关联可能更合适。或者更好的是大小为2的数组Example[]

您怎么看?

如果您有任何不同的建议请告诉我。

1 个答案:

答案 0 :(得分:0)

您可以向要与一个或多个Set关联的班级添加Example类型的字段。将这些Example值添加到您要将类型与之关联的集合中。

代码示例

public class MyObject {

    public static MyObject createAssociatedWithBAndC() {
        return new MyObject(Example.B, Example.C);
    }

    public static MyObject create(Example example) {
        return new MyObject(example);
    }

    private final Set<Example> examples = new HashSet<>();

    private MyObject(Example... examples) {
        for (Example example : examples) {
            this.examples.add(example);
        }
    }
}

如果您确实需要避免使用太多内存,请尝试以这种方式(反映您的要求)使用null作为与B和C 相关联:

public class MyObject {

    private final Example example;

    private MyObject(Example example) {
        this.example = example;
    }

    public Set<Example> getExamples() {
        return example == null
            ? EnumSet.of(Example.B, Example.C)
            : EnumSet.of(example);
    }
}

现在你只持有一个或没有Example s而没有任何意思:与B和C 相关联。如果实例化,EnumSet也可以扩展尝试:

public class MyObject {

    private final Set<Example> examples;

    private MyObject(Example example) {
        this.example = example == null
            ? EnumSet.of(Example.B, Example.C)
            : EnumSet.of(example);
    }

    public Set<Example> getExamples() {
        return examples;
    }
}