Java 具有扩展多个类型的泛型参数的静态字段
我所拥有的没有任何问题: 我有多个扩展同一接口的枚举:Java 具有扩展多个类型的泛型参数的静态字段,java,generics,enums,multiple-bounds,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 } 我想通过它们的共同继承者来
interface CommonMethods {
// some methods
}
enum E1 implements CommonMethods {
O1, O2;
// interface method impls
}
enum E2 implements CommonMethods {
O3, O4;
// interface method impls
}
我想通过它们的共同继承者来处理这些问题:Enum
和CommonMethods
到目前为止,我有这样的方法:
static <L extends Enum<?> & CommonMethods> void m(L l) {}
class Test1 {
static List<Enum<?> & CommonMethods> l = new LinkedList<>();
static {
l.add(E1.O1);
l.add(E2.O3);
}
}
static&CommonMethods>l=newlinkedlist();
静止的{
l、 添加(E1.O1);
l、 添加(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) {}
}
类Test2{
静态列表&CommonMethods>void m(L){}
}
这样我就失去了可接受类型的约束
如何保持约束? 注意:这只是一个虚拟代码,而不是我目前尝试使用的真实代码,因此请不要提出重构建议。将类型声明为:
static <L extends Enum<? extends CommonMethods>> void m(L l) {}
static我想你的意思是:static@Bart我想你是对的。有关此主题的讨论,请参阅如果接口未参数化怎么办?@basin接口,CommonMethods
,未参数化。该问题询问有关参数化的enum
。