在问答里提问,没有得到答案,特开此贴讨论。
代码如下:
public class Cast {public static <T> T cast(Object o){ return (T)o; } public static void main(String[] args){ Object o =new Bird(); Bird b=Cast.cast(o); //cast方法上的Doc提示:<Bird> Bird Cast.cast(Object o) Cast.cast(o); //Doc提示: <Object> Object Cast.cast(Object o) Fish f=Cast.cast(b); //Doc提示:<Fish> Fish Cast.cast(Object o) //!!ClassCastException } public static class Bird{} public static class Fish{}}
cast泛型方法是如何做类型推断的?
Bird b=Cast.cast(o); //cast如何推断出T就是Bird??!! 问题在这里
Cast.cast(o); //cast此时只能推断出T就是Object
难道区别在于有没有接收返回值,有的话,可以根据"="号左边的类型继续推断;没有的话,只能推断出cast方法的参数类型;
求详细解答 或 给予参考资料 OTZ
问题补充
七心JAVA 写道
Bird b=Cast.cast(o);
是不是得加个类型强制转换?
是不是得加个类型强制转换?
不需要,代码是从eclipse里拿出来的,java编译器可以通过
问题补充
IcyFenix 写道
嗯,实际上这里确实是有个强制转换的,只不过...
恩,请详细解释: Bird b=Cast.cast(o); //cast如何推断出T就是Bird??!! 问题在这里
所有的泛型信息都会被擦除掉,这么说绝对吗?