小编Phi*_*ppe的帖子

具有冗余类型参数的泛型方法

我在理解以下两个方法签名之间的差异时遇到问题。

abstract class Example {
  void test() {
    Class<? extends Parent<? extends Child>> clazz = null;

    works(clazz);
    error(clazz); // Error
  }

  abstract <T extends Child> Parent<T> works(Class<? extends Parent<? extends T>> clazz); // Method1
  abstract <T extends Child> Parent<T> error(Class<? extends Parent<T>>           clazz); // Method2

  interface Child {}
  interface Parent<U extends Child> {}
}
Run Code Online (Sandbox Code Playgroud)

编译此代码会出现以下错误(使用 1.8.0_271、11.0.9 和 15.0.1 测试)。

…/src/main/java/Example.java:6:5
java: method error in class Example cannot be applied to given types;
  required: java.lang.Class<? extends Example.Parent<T>>
  found: java.lang.Class<capture#1 of ? …
Run Code Online (Sandbox Code Playgroud)

java generics

5
推荐指数
1
解决办法
121
查看次数

标签 统计

generics ×1

java ×1