实例化泛型类型的EnumSets

时间:2014-01-10 03:06:21

标签: java generics collections enums

我有两个实现通用接口的枚举。我试图声明界面,所以只有枚举才能实现它。

interface CommonEnumInterface<E extends Enum<?>> {

    /** It doesn't matter what this does. */
    E commonInterfaceMethod();

}

enum Enum1 implements CommonEnumInterface<Enum1> {
    FOO,
    BAR,
    BAZ;

    @Override
    public Enum1 commonInterfaceMethod() {
        return null;
    }
}

enum Enum2 implements CommonEnumInterface<Enum2> {
    BLAH,
    YADDA,
    RHUBARB;

    @Override
    public Enum2 commonInterfaceMethod() {
        return Enum2.BLAH;
    }
}

现在我想声明一个扩展CommonEnumInterface的泛型类型参数,这应该意味着泛型类型也是一个枚举:

class CreatingGenericEnumSet<E extends Enum<E> & CommonEnumInterface<E>> {

    CreatingGenericEnumSet() {

        // Is it possible to instantiate an EnumSet of a generic type?
        EnumSet<E> enumSet = EnumSet.noneOf(E.class); // Illegal class literal

        // According to a comment by @tackline, this is illegal, too.
        Collection<E> hackyVariable = Collections.emptyList();
        EnumSet<E> jankyWay = EnumSet.copyOf(hackyVariable);

    }
}

我的问题在上面的评论中。是否有一种方法,最好是在一行中,声明一个泛型类型的EnumSet?

这是声明接口和输入参数的正确方法吗?

1 个答案:

答案 0 :(得分:5)

class CreatingGenericEnumSet<E extends Enum<E> & CommonEnumInterface<E>> {

    CreatingGenericEnumSet(Class<E> enumClass) {

        EnumSet<E> enumSet = EnumSet.<E>noneOf(enumClass);


    }
}

可以找到类似的问题here