番石榴:如何键入通用枚举的幂集列表
Guava: How to type a List of powersets of generic Enums
我正在编写一个函数,它需要三个不同枚举的所有 powerSet 的列表。我正在使用 Guava 的 Sets class,但我在输入时遇到了问题。
Set<? extends Enum> allSlots = EnumSet.allOf(Slot.class);
Set<Set<? extends Enum>> slotsPS = Sets.powerSet(allSlots);
Set<Set<Day>> daysPS = Sets.powerSet(EnumSet.allOf(Day.class));
Set<Set<Time>> timesPS = Sets.powerSet(EnumSet.allOf(Time.class));
List<Set<Set<? extends Enum>>> allPS = new ArrayList<>();
allPS.add(slotsPS);
我已将其缩小到 Guava 的 powerSet 函数,这是我沮丧的根源。
Set<Set<? extends Enum>> slotsPS = Sets.powerSet(allSlots);
给出错误:
incompatible types: no instance(s) of type variable(s) E exist so that Set<Set<E>> conforms to Set<Set<? extends Enum>>
where E is a type-variable:
E extends Object declared in method <E>powerSet(Set<E>)
Sets.powerSet(allSlots)
是 Set<Set<Slot>>
,因此您需要使用:
Set<? extends Set<? extends Enum<?>>>
如果您想删除实际的枚举类型。
我正在编写一个函数,它需要三个不同枚举的所有 powerSet 的列表。我正在使用 Guava 的 Sets class,但我在输入时遇到了问题。
Set<? extends Enum> allSlots = EnumSet.allOf(Slot.class);
Set<Set<? extends Enum>> slotsPS = Sets.powerSet(allSlots);
Set<Set<Day>> daysPS = Sets.powerSet(EnumSet.allOf(Day.class));
Set<Set<Time>> timesPS = Sets.powerSet(EnumSet.allOf(Time.class));
List<Set<Set<? extends Enum>>> allPS = new ArrayList<>();
allPS.add(slotsPS);
我已将其缩小到 Guava 的 powerSet 函数,这是我沮丧的根源。
Set<Set<? extends Enum>> slotsPS = Sets.powerSet(allSlots);
给出错误:
incompatible types: no instance(s) of type variable(s) E exist so that Set<Set<E>> conforms to Set<Set<? extends Enum>>
where E is a type-variable:
E extends Object declared in method <E>powerSet(Set<E>)
Sets.powerSet(allSlots)
是 Set<Set<Slot>>
,因此您需要使用:
Set<? extends Set<? extends Enum<?>>>
如果您想删除实际的枚举类型。