java - 具有泛型参数的静态字段可扩展多种类型

我所拥有的没有任何问题:
我有多个扩展同一接口的枚举:

interface CommonMethods {
    // some methods
}

enum E1 implements CommonMethods {
    O1, O2;
    // interface method impls
}

enum E2 implements CommonMethods {
    O3, O4;
    // interface method impls
}

我想让他们的共同继承人来处理这些问题:EnumCommonMethods
到目前为止,我有这样的方法:
static <L extends Enum<?> & CommonMethods> void m(L l) {}

所以我可以处理这些枚举,比如从commonmethods接口调用方法。
现在问题开始了:
但我也希望将其中一些存储在类的静态列表字段中,如下所示:
class Test1 {
    static List<Enum<?> & CommonMethods> l = new LinkedList<>();

    static {
        l.add(E1.O1);
        l.add(E2.O3);
    }
}

这给了我编译器错误。我有一个我认为不好的解决办法:
class Test2 {
    static List<Enum<?>> l = new LinkedList<>();

    static {
        l.add(E1.O1);
        l.add(E2.O3);
    }

    static <L extends Enum<?> & CommonMethods> void m(L l) {}
}

这样我就失去了可接受类型的约束。
我能做什么来保持约束?
注意:这只是一个伪代码,而不是我目前试图使用的真正代码,因此请不要提出重构建议。

最佳答案

将类型声明为:

static <L extends Enum<? extends CommonMethods>> void m(L l) {}

我自己在做了大量的研究之前和之后,就已经提出了这个问题,我的结论是,这实际上与类型交叉口是相同的。
这篇文章及其答案讨论了这个话题。

本文翻译自 https://stackoverflow.com/questions/38923418/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java generics enums multiple-bounds


相关文章:

java - 用Java解析日期的毫秒部分

java - 如何在不打开的情况下保存由itextpdf生成的pdf文件?

java - 无法在初始化程序中引用静态枚举字段Cbev2Key.log

c++ - 无法在C ++中定义++运算符,这是什么问题?

c++ - 访问在类外部声明的作用域枚举

java - 如何使用Java API在现有的Elasticsearch索引中添加更多文档?

java - 当我的项目中没有任何实体时,如何将原生查询映射到POJO?

c# - .NET通用类实例-传递变量数据类型

swift - Swift Generics - 调用哪种方法?

c# - 返回默认值。 (C#)