实现通用接口的通用类型参数

时间:2014-07-11 19:03:20

标签: java generics interface

在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类型(或根据接口的任何其他类)。

1 个答案:

答案 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;
  }
}