为什么会出现这种情况?一行代码能正常工作,而另一行类似的代码却不能。自动类型转换只在某些条件下发生吗?我尝试将gt.echoV()赋值给一个对象,它能正常运行;但当我将它赋值给一个字符串时,同样的错误又出现了。
public class GeneMethodTest {
public static void main(String... args) {
GeneMethodTest gt = new GeneMethodTest();
gt.<String>echoV(); //this line works well
gt.<String>echoV().getClass();//this line leads to a type cast exception
}
public <T> T echoV() {
T t=(T)(new Object());
return t;
}
}
(T)(new Object())
是一个 未经检查的转换 - 请确保了解它的含义和影响,以及 类型擦除。 - Paul Bellora<String>
本身与强制转换无关 - 它只是泛型方法的类型参数。gt.<String>echoV()
单独不需要编译器插入任何强制转换,因此在运行时不会失败。 - Paul Bellora