Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现泛型交互的泛型类型参数_Java_Generics_Interface - Fatal编程技术网

Java 实现泛型交互的泛型类型参数

Java 实现泛型交互的泛型类型参数,java,generics,interface,Java,Generics,Interface,在Java应用程序中,我想使用一个泛型类型参数,它实现一个使用泛型参数本身的接口 public interface SuperInterface<T> { ... } public interface MyInterface extends SuperInterface<MyClass> { ... } public class Worker<T extends SuperInterface<U>> extends SuperWorker&l

在Java应用程序中,我想使用一个泛型类型参数,它实现一个使用泛型参数本身的接口

public interface SuperInterface<T> { ... }

public interface MyInterface extends SuperInterface<MyClass> { ... }


public class Worker<T extends SuperInterface<U>> extends SuperWorker<String, Boolean> {

}
公共接口超级接口{…}
公共接口MyInterface扩展超级接口{…}
公共类工作者扩展超级工作者{
}

但是,类声明不会这样工作。T应为MyInterface类型(或实现超级接口的任何其他接口),U应为MyClass类型(或根据接口的任何其他类)。

您必须在顶层声明所有类型参数。这很烦人,但事实就是这样

public class Worker<U extends MyClass, T extends SuperInterface<U>> { ...
公共类工作程序{。。。
参数的顺序并不重要;您也可以执行
Worker
。重要的是每个参数都在嵌套泛型的顶层声明

这是一个完整的课程:

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;
  }
}
公共类MyClass{
公共接口超级接口{}
公共接口MyInterface扩展超级接口{}
公共阶级工作者{}
public void compileTest(){
//只是为了确保声明能够编译
Worker=null;
}
}

很乐意提供帮助!如果
U
可以是任何类型,则无需写出
U extends Object
。只需执行
class Worker