为什么泛型的这种使用不会引发运行时或编译时异常?
我在一个类中有一个方法,该方法具有通过使用泛型指定的返回类型。
public class SomeMain {
public static void main(String[] args) {
Foo<Integer> foo = new Foo<Integer>();
System.out.println(foo.getFoo()); // Works, prints out "Foo"
}
public static class Foo<E> {
public E getFoo() {
return (E) "Foo";
}
}
}
对于泛型返回类型,我假设上面示例中的返回值将计算为:
return (Integer) "Foo"; // Inconvertible types !!!
相反,返回并正确打印 a。String
如果我将调用更改为:
String fooString = foo.getFoo(); // Compile error, incompatible types found
System.out.println(fooString);
我错过了什么来帮助我了解这里发生了什么,以及为什么原始版本没有导致编译错误。