具有泛型参数的静态字段扩展多个类型

时间:2016-08-12 17:23:30

标签: java generics enums multiple-bounds

我没有任何问题:

我有多个扩展相同界面的枚举:

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) {}
}

这样我就失去了可接受类型的约束。


如何保持约束?

注意:这只是一个假人,而不是我目前正在努力工作的真实代码,所以请不要重构建议。

1 个答案:

答案 0 :(得分:2)

将类型声明为:

select m.mname, s.lang, s.sdesc, l.lang, l.ldesc
from main m
left join short_desc s on s.id = m.sid
left join long_desc l on l.id = m.lid
where s.lang = l.lang

在我进行大量研究之前和之后,我已经解决了这个问题,我得出结论,这与类型交集有效。

question及其答案讨论了此主题。