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

时间:2018-11-29 05:44:54

标签: java generics

我有以下课程,可以正常编译

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

但是当我将退货类型更改为此

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

我的return语句开始出错,说

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

1 个答案:

答案 0 :(得分:2)

这是因为第二种情况

MyClass<Double> d = foo();

是有效呼叫,但第一个不是。