下面是一个代码示例,其中在使用泛型时发生与转换相关的事情并不完全清楚。有两个类,一个继承另一个(A 和 B)。还有一个通用方法(f1)。我们告诉该方法我们希望它返回 B 类型的对象。在该方法中,我们创建一个 A 类的新对象并尝试将其转换为 B 类型。显然,这不起作用,但不会产生错误。此外,从 f1() 方法返回的类型为 A 的对象没有错误,即使 A 是 B 的祖先,而不是子对象。尝试将执行 f1() 的结果分配给指针 B b 时发生错误
- f1 什么时候改变了它的输出类型?分配了 B 类,但成功返回了 A 类的对象。因为 在 A 的后代中,反之亦然,那么这显然不是多态性。
- 为什么变换 T t = (T) new A(); 没有给出任何错误?它没有发生。
public class Main
{
public static void main(String[] args) {
Main main = new Main();
B b = main.<B>f1();
}
public <T> T f1(){
T t = (T) new A();
System.out.println(t instanceof B); //false
return t;
}
}
class A {
}
class B extends A{
}
还有一个通用方法(f1)。我们告诉该方法我们希望它返回 B 类型的对象——拥有一个泛型方法对您意味着什么?在java中,可以有同名但参数不同的方法。因此,您将无法在所有场合都使用一种方法。