Java-Note-浅析Java泛型采用类型擦除的实现方式的原因

  • 泛型的类别有两种:
    1. 真泛型: 在源码, 中间语言, 运行期的Common Language Runtime中都存在, 且在运行期间有自己的虚方法表和数据类型. 这种类别的实现方式是类型膨胀. 如C#;
    2. 伪泛型: 只在源码中存在, 在中间语言(如字节码)中被替换成原生类型(如 ArrayList为原生类型, ArrayList为具体类型). 这种类别的实现方式是类型擦除. 如Java;
  • Java选择类型擦除这种实现方式主要是为了支持迁移兼容性, 使类库按照它们自己的步调变成泛型, 并且这样做不会破坏依赖它的代码和应用程序
    • 举个例子:
      • jdk1.4下的List类的get方法是这样的:
        listget1.4.png
      • jdk1.5下的List类的get方法是这样的:
        listget1.5.png
      • 假设我们要获取List对象中的一个String, 在jdk1.4下调用get方法返回的是Object, 程序员需要在客户端中手动进行类型转换如: (String)get(...), 而当List类转变为泛型类后, 无需对客户端进行任何改动, 程序照常运行, 虽然(String)会变成多余的, 但不会对程序的运行产生任何影响

你可能感兴趣的:(Java-Note-浅析Java泛型采用类型擦除的实现方式的原因)