在返回类型中使用通配符与定义的泛型类型有何不同



我有下面的类,它编译了精细的

class MyClass<T> {
MyClass<? extends Number> foo() {
return new MyClass<Integer>();
}
}

但是当我把退货类型改为这个时

class MyClass<T> {
<R extends Number> MyClass<R> foo() {
return new MyClass<Integer>();
}
}

我开始在退货声明中出错,说

incompatible types: MyClass<java.lang.Integer> cannot be converted to MyClass<R>

这是因为对于第二种情况

MyClass<Double> d = foo();

是有效的调用,但第一个调用不是。

最新更新