我遵循该类的定义.
public class Test2<T extends Test3> {
private T t ;
public T foo() {
Test3 test3 = new Test3();
t = test3; // I get compilation error here.**
return t;
}
}
class Test3 {
}
Run Code Online (Sandbox Code Playgroud)
我在第t = test3行得到编译错误,说"类型不匹配无法从Test3转换为T;有什么问题?
你正在做的是等同于:
Integer n = new Number();
Run Code Online (Sandbox Code Playgroud)
并且与泛型无关(请注意Integer extends Number).编译器指示您不能将父类型分配给子类型的实例,父类型可能不会实现所有子类型的所需方法.
在这种情况下T是子类型Test3或其Test3自身.所以在这里,您尝试将父类(T)分配给包含子类(Test3)的变量,并且它失败,就像上面的示例一样.