【问题标题】:inference variable T has incompatible bounds推理变量 T 具有不兼容的界限
【发布时间】:2015-10-09 23:05:01
【问题描述】:

给定一个具有以下签名的方法。

public static <T extends Comparable<T>> int dummyMethod(List<T> list, T elem) {
  // Body
}

以下两种方法中只有第一种编译成功。

public void call() {
  MyClass v = new MyClass();
  List<MyClass> ls = new ArrayList<>();
  dummyMethod(ls, v);
}

public void brokenCall() {
  Comparable<MyClass> v = new MyClass();
  List<Comparable<MyClass>> ls = new ArrayList<>();
  dummyMethod(ls, v);    // Compilation error here.
}

javac(JDK 8u60)返回的错误如下:

.\MyClass.java:23: error: method dummyMethod in class MyClass cannot be applied to given types;
    dummyMethod(ls, v);    // Compilation error here.
    ^
  required: List<T>,T
  found: List<Comparable<MyClass>>,Comparable<MyClass>
  reason: inference variable T has incompatible bounds
    equality constraints: MyClass,Comparable<MyClass>
    lower bounds: Comparable<MyClass>
  where T is a type-variable:
    T extends Comparable<T> declared in method <T>dummyMethod(List<T>,T)
1 error

我很困惑为什么在 brokenCall 中作为参数提供给 dummyMethod 的变量类型与它的签名不匹配。

【问题讨论】:

    标签: java generics


    【解决方案1】:

    brokenCall 中,您正在制作T = Comparable&lt;MyClass&gt;,但Comparable&lt;MyClass&gt; extends Comparable&lt;Comparable&lt;MyClass&gt;&gt; 无效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      相关资源
      最近更新 更多