获取EnumSet的枚举类

时间:2016-12-22 12:23:50

标签: java generics

是否可以从Size of List 0 is 16 Size of List 1 is 32 Size of List 2 is 56 类型的变量中获取Enum的类。

请考虑以下代码:

EnumSet

enum Foo { FOO_0, FOO_1, } <E extends Enum<E>> void fooBar(EnumSet<E> enumSet, Class<E> type) { EnumSet<E> none = EnumSet.noneOf(type); // ... } void bar() { EnumSet<Foo> enumSet = EnumSet.of(Foo.FOO_1); fooBar(enumSet, Foo.class); } 中撰写Foo.class似乎是多余的。我想从fooBar()class函数中提取enumSet。这甚至可能吗?

我希望做的只是致电fooBar(),仍然可以将fooBar(enumSet);变量实例化为none

1 个答案:

答案 0 :(得分:2)

也适用于空EnumSet,并且即使元素具有类主体,也会返回正确的enum类型:

public static <T extends Enum<T>> Class<T> getElementType(EnumSet<T> enumSet) {
    if (enumSet.isEmpty())
        enumSet = EnumSet.complementOf(enumSet);
    return enumSet.iterator().next().getDeclaringClass();
}