在Java应用程序中,我想使用泛型类型参数来实现一个使用泛型参数本身的接口。
public interface SuperInterface<T> { ... }
public interface MyInterface extends SuperInterface<MyClass> { ... }
public class Worker<T extends SuperInterface<U>> extends SuperWorker<String, Boolean> {
}
但是,班级宣言不会像那样工作。 T应该是MyInterface类型(或任何其他实现SuperInterface的接口),U应该是MyClass类型(或根据接口的任何其他类)。
答案 0 :(得分:1)
您必须在顶层声明所有类型参数。这很烦人,但事情就是这样。
public class Worker<U extends MyClass, T extends SuperInterface<U>> { ...
参数的顺序并不重要;你也可以做Worker<T extends..., U extends...>
。重要的是每个都在嵌套泛型的顶层声明。
这是一个完整的课程:
public class MyClass {
public interface SuperInterface<T>{}
public interface MyInterface extends SuperInterface<MyClass> {}
public class Worker<U extends MyClass, T extends SuperInterface<U>> {}
public void compileTest() {
// just to make sure the declaration compiles
Worker<MyClass, MyInterface> worker = null;
}
}