解决方案 »
- 指定长度,打印字符串,不到长度,用空格填上,怎么写?
- Java字符串中找单词出现个数?
- jdom中调用setAttribute(Sring key,Sring value)时,如果key中带有冒号,则报错
- 线程基础问题
- 关闭副窗口,却把主窗口也关闭了???
- 高分求verycd的注册序列号
- 为什么String str1 = "abc";String str2= "abc";中的str1和str2是相同的?
- 大侠帮我!为何JComboBox 不能显示???
- 定义和声明的区别是什么?
- java能否对地址进行操作如tc中的import()
- java的画图的小问题、、
- Java File读取Linux下,使用ln -s创建的链接
以下为你那段代码编译为class文件,再反编译出来的代码,即为类型擦出后的代码。可以看到第10行,List<Integer> intList=list;经过类型擦除后已经变成了List intList = list;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;public class RawTypeTest
{
public static void main(String[] args)
{
List list = new ArrayList();
list.add("ab");
list.add("cd");
List intList = list; for (int i = 0; i < intList.size(); ++i)
System.out.println(intList.get(i));
}
}而List list = new ArrayList();在执行了这一句之后,list的类型估计应该默认是Object了,而在赋值给intList后,类型是不会变得,所以以下代码估计在执行的会是下面那段代码
public E get(int index) {
RangeCheck(index);
return (E) elementData[index];//执行到这个位置,不会发生类型转换异常吗?
}
public Object get(int index) {
RangeCheck(index);
return (Object) elementData[index];//执行到这个位置,不会发生类型转换异常吗?
}
这只是我的理解,有不对的地方,请大家指出
java的泛型被称为伪泛型,它只在程序源码中存在,在编译后的字节码文件中,就已经被替换为原来的原生类型(Raw Type,也称裸类型)了,并且在相应的地方插入了强制转型代码,因此对于运行期的java语言来说,List<Integer>与List<String>就是一个类。所以泛型技术实际上是Java语言的一颗语法糖,Java语言中的泛型实现方法称为类型擦除,基于这种方法实现的泛型被称为伪泛型。
intList.get(i)//泛型擦除后->返回为Object
但是如果这样
Integer in=inList.get(i)//发生String can not cast Integer谢谢了