我的解决方案不适用于布尔值,但您可以调整它。例如调用 Option.CombinedOption.get(Option.ONE, Option.THREE) 返回枚举 CombinedOption.OPTION_1_3。
public enum Option {
ONE, TWO, THREE;
public enum CombinedOption {
ALL_FASLSE(), OPTION_1(ONE), OPTION_1_2(ONE, TWO), OPTION_1_3(ONE,
THREE), OPTION_1_2_3(ONE, TWO, THREE), OPTION_2(TWO), OPTION_2_3(
TWO, THREE), OPTION_3(THREE);
private Set<Option> keySet;
private CombinedOption(Option... options) {
if (options != null && options.length > 0)
keySet = EnumSet.copyOf(Arrays.asList(options));
else
keySet = EnumSet.noneOf(Option.class);
}
private static final Map<Set<Option>, CombinedOption> optionMapping = new HashMap<Set<Option>, CombinedOption>();
static {
for (CombinedOption combined : CombinedOption.values()) {
optionMapping.put(combined.keySet, combined);
}
}
public static CombinedOption get(Option... options) {
Set<Option> keySet;
if (options != null && options.length > 0)
keySet = EnumSet.copyOf(Arrays.asList(options));
else
keySet = EnumSet.noneOf(Option.class);
return optionMapping.get(keySet);
}
}
}