• Java泛型擦除


    Java泛型擦除

    什么是泛型擦除?

           首先了解一下什么是泛型?我个人的理解:因为集合中能够存储随意类型的对象。可是集合中最先存储的对象类型一旦确定后,就不能在存储其它类型的对象了,否则,编译时不会报错。但执行时会抛出ClassCastException异常。为解决此问题,引入泛型,指定该集合对象中存储的对象类型,这样一旦该集合中存储了其它的对象类型,编译时会提示错误!(理解不当之处。希望大神多指点吐舌头)。

            泛型的擦除就是说。在编译的时候集合中指定了确定的对象类型,但在执行时将集合中能够存储的该对象类型擦除了!

    举例来说的话就是:

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
    1. import java.awt.List;  
    2. import java.util.ArrayList;  
    3. public class GenericDemo {  
    4.   
    5.     public static void main(String[] args) {  
    6.         ArrayList<String> a = new ArrayList<String>();  
    7.         // 集合a中仅仅能存储String类型的对象  
    8.         a.add("abc");  
    9.         a.add(6);   // 报错.执行时凝视掉  
    10.           
    11.         ArrayList<Integer> b = new ArrayList<Integer>();  
    12.         // 集合b中仅仅能存储Integer类型的对象  
    13.         b.add(6);  
    14.         b.add("abc");   // 报错.执行时凝视掉  
    15.           
    16.         System.out.println(a.getClass() == b.getClass());  
    17.         // 输出结果为    true  
    18.         /*  
    19.          *  原因:泛型执行时具有擦除功能;ArrayList<String>和ArrayList<Integer>擦除  
    20.          *  后的类型为ArrayList  
    21.          */  
    22.     }  
    23. }  
    每一个类都有一个class属性,该样例同一时候说明使用泛型不会改变class属性的返回值。

    注意点:Java不能创建泛型数组:由于Java中的数组都是通过反射动态建立的,在执行时,泛型会擦除类型信息,所以没有了类型信息。当然也就不能构造出数组了。

    以上言语措辞或对问题的认识上有什么不当的,希望路过大神不吝赐教!

  • 相关阅读:
    Emgucv使用中常用函数总结
    设置 omitempty 标签忽略空值字段
    Goland 中定义实时模板
    gorm Update
    Gorm 日期格式错误
    Gorm 多张表的自动迁移
    Sql取出各科分数前三名的学生,Sql各科成绩前三的学生
    美团Leaf分布式ID Leaf安装和使用,美团Leaf snowflake雪花算法模式,美团Leaf segment号段模式
    RocketMQ可靠消息最终一致性解决方案
    Windows安装RocketMQ,RocketMQ Windows安装和使用
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6812508.html
Copyright © 2020-2023  润新知