我们说我有以下枚举:
public enum Example{
A,
B,
C,
D,
E;
}
我需要一个Object和上面的枚举之间的关联。
在我的特定情况下,一个对象必须只有一个Example
关联,但Example.B
和Example.C
除外,因为一个Object最终可能有这两个关联。
现在我的解决方案是:我创建了一个五个布尔值的对象包装器,每个布尔值代表一个枚举。如果它为真,则表示与表示的示例常量有关联。
最后,我在Object和Wrapper之间建立了关联。 问题在于我认为没有必要随身携带这五个布尔值,因为在大多数情况下只有布尔值才是真的,在极少数情况下只有两个布尔值是真的。但绝不会超过两个。
然后我认为对象和ArrayList<Example>
之间的关联可能更合适。或者更好的是大小为2的数组Example[]
。
您怎么看?
如果您有任何不同的建议请告诉我。
答案 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;
}
}