在看到类型擦除的时候,有点疑惑。
举个例子:
ArrayList<String> arrayList=new ArrayList<String>();
arrayList.add("123")//这个地方必须是字符串
为什么不可以是其他类型,不是说在编译的时候类型擦除了吗,那么,它的原始类型应该为Object,那么为什么add方法的参数不可以是其他的类型?

解决方案 »

  1.   

    刚才瞅了一下核心技术   在java5.0以前这个是不检查的 
    arrayList.add(123); 这个是可以执行的 
    但是在从arrayList中取这个值的时候会有错误  因此我觉着也是跟上面那哥们说的一样
    先检查编译是否有错在执行
      

  2.   

    哎 ,2了,可以想的到的是,在eclipse中arrayList.add(123),直接就会有错误,这不就是说明吗,这是在编译之前检查的吗?
    是不是这样的
      

  3.   

    ArrayList<?> 应该用问好代替就可以擦除了吧
      

  4.   

    ArrayList<?> 这个我只在类型检查的时候看到
    array instanceof ArrayList<?> 
    肯定也是类型擦除之后,不能使用ArrayList<String> 、ArrayList<Integer>这样的写法。
    这个是在运行时检查的,。所以采用特出的写法
      

  5.   

    你都确定了String了,怎么能放别的类型呢?
      

  6.   

    泛型是在编译时检查,在运行时擦除。
    ArrayList<String> arrayList=new ArrayList<String>();编译时即指定了arrayList的类型是ArrayList<String>,list中存储的元素类型是String,因此放入其他非String类型的数据时会报编译错误。运行时arrayList的类型变成原生态类型ArrayList。