解决方案 »
- 烦请问下大家, java有没有设计图形界面的设计器
- 求剪刀石头布程序源程序 好的话我再加分
- 类和Object关系的问题
- JComboBox为可编辑时为什么不能每按下一个键就反应一次???在线等!!!!!!!!!!!!急急急>>>>>>>>>>
- 哪位好心人可以帮帮我?哪里有jbuilder9的入门教程下载呀?我找了好久找不到
- 有关网页信息抽取
- 连接ms access,如果不用odbc的话,大家一般用什么驱动?
- 请教高人,一个排列组合问题
- tomcat 运行一段时间后几乎耗尽系统资源
- 请问:在哪里能找到JAVA编译器和解释器?我是一个初学者。我想学JAVA。
- 请问用Java如何以字节为单位读取一个非文本文件
- arrays
泛型方法public static <T> T[] getElement(T[] obj),当你传入的参数为String[] i 时,此时的T就为String了,也就是方法可以理解为:public static String[] getElement(String[] obj)。你直接这样调用就会编译失败了:String[] s1 = getElement(o);
24: invokestatic #5 // Method getElement:([Ljava/lang/Object;)[Ljava/lang/Object;
也可以看出返回类型是[Ljava/lang/Object;不能理解为public static String[] getElement(String[] obj)吧?
“当你传入的参数为String[] i 时,此时的T就为String了”版主,能这样理解吗?有依据没?不理解。
比如说,有一个类 A, 继承了 B,C 两种接口,然后我们令 B b = new A();那么如果希望使用到 b 的 C 接口的方法,我们就得进行类型转换 C c = (C) b;但是 B,C 之间又没有明确的继承关系,所以Java 为了避免这种情况,就允许强制类型转换不正确的类型.只有当你具体运行到代码的时候,才会根据实际类型抛出异常
你确定范型擦除了数据了吗?擦除数据是当数组形式为 LIst<T>[]时才会将类型擦除,你直接使用 String[]类型是保留的,怎么会擦除类型呢
你确定范型擦除了数据了吗?擦除数据是当数组形式为 LIst<T>[]时才会将类型擦除,你直接使用 String[]类型是保留的,怎么会擦除类型呢应该擦除了,楼主可以看我的反编译源码,24: invokestatic #5 // Method getElement:([Ljava/lang/Object;)[Ljava/lang/Object;这段触发getElement方法,返回类型就是Ljava/lang/Object即Object[]
而对于第二个例子,他的真实类型是 String[],先向上转型成功,然后再向下转型,真实类型是对的,也成功
B b = new B();
B b = a;
楼主比较纠结的问题是你看了编译文件,不正事编译时,擦除了吗
String[] s1 = getElement(i);
声明的类型是String[],即引用s1的类型
运行时右边方法传过去的类型也是String[],因为编译器帮忙强转了可是,现在纠结的是,我反编译的代码里面看不到编译器插入的cast指令呀!所以不能验证书上的说法。所以头疼这个问题,现在不管了,就相信书上书法吧。