java - 实例化通用类型的 EnumSet

标签 java generics collections enums

我有两个实现通用接口(interface)的枚举。我已尝试声明接口(interface),因此只有枚举可以实现它。

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?

这是声明接口(interface)和类型参数的正确方法吗?

最佳答案

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

    CreatingGenericEnumSet(Class<E> enumClass) {

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


    }
}

类似问题可以找here

关于java - 实例化通用类型的 EnumSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21035510/

相关文章:

java - 当我们在 Spring Boot 中对 Scope Protype 使用代理模式时,原型(prototype) bean 的对象何时被垃圾回收

java - Kafka 不会从 PEM 证书开始

java - 如何使用可执行 Jar 包含文本文件

c# - c# 中的类(使用 filehelpers)- 可空字符串在其他可空类型不存在时给出错误

swift - 如何扩展接受数组通用元素的类型?

java - 如何对多变量函数建模?

sorting - Backbone 排序方法

java - 将 ListIterator 限制为前 N 个元素(优化)

java - 在 Android Studio 项目中使用 htmlunit 时,没有 Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier 类型的静态字段实例

c# - 尝试将通用的 MyObj<T, U> 放入 IList 中,其中对象之间的 U 可能不同