在Java中,我使用Enum
,然后使用EnumSet
将代表类似行为的各种枚举分组。
就像是 :
enum MyConditions {
condition_A;
condition_B;
condition_1;
condition_100;
condition_xyz;
... more ...
}
EnumSet<MyConditions> group1 = EnumSet.of(condition_A, condition_xyz);
EnumSet<MyConditions> group2 = EnumSet.of(condition_B, condition_xyz);
EnumSet<MyConditions> group3 = EnumSet.of(condition_xyz);
... and many more...
EnumSet
不同的原因是我想测试特定条件是否属于组1或组2或组3,依此类推。感觉设计有点困惑,因为我必须针对不同的条件制作越来越多的
EnumSet
,并且该设计不支持子分组。例如,组合group1和2以测试父项条件。我提出的其他建议是在枚举结构本身中提供该组。
就像是 :
enum MyConditions {
condition_A(group1);
condition_B(group2);
condition_1;
condition_100;
condition_xyz(group1, group2);
... more ...
}
这也不是很好,因为当有多个组时,这会导致
Enum
的可读性。Enums
是静态数据,对应于第三方API中的某个整数。是的,我想动态创建条件组关系,或者如果我手动定义,则至少比我目前的工作方式更清洁。除了仅查找特定条件是否在特定组中之外,还有多个组可以代表相似条件。例如,如果呼叫者要一个条件,并且该条件不是组1的一部分,而是组2。我们想说“不,它不是组1的一部分,而是组2的一部分”。假设group1和group2被标记为相似。但是,假设有一个独立的group3,并且如果用户询问是否是group3的条件部分,我们只想说“不,它不是group3的一部分”关于什么是好的设计有什么想法吗?
最佳答案
为了在条件和组之间的关联上具有很大的灵活性和查询服务,您可以为组定义另一个枚举类型,并在类中封装组和条件组之间的映射(如果更方便,也可以采用其他方式):
public class Mapping {
private final EnumMap<Group, EnumSet<MyConditions>> mappings =
new EnumMap<>(Group.class);
// or
private EnumMap<MyConditions, EnumSet<Group>> mappingsV2 =
new EnumMap<>(MyConditions.class);
}
关于java - 通过多对多关系将Enum分组到不同条件的有效设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58665705/