Java泛型擦除:

什么是泛型擦除?

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

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

举例来说的话就是:

[html] view
plain
copy

  1. import java.awt.List;
  2. import java.util.ArrayList;
  3. public class GenericDemo {
  4. public static void main(String[] args) {
  5. ArrayList<String> a = new ArrayList<String>();
  6. // 集合a中仅仅能存储String类型的对象
  7. a.add("abc");
  8. a.add(6);   // 报错.执行时凝视掉
  9. ArrayList<Integer> b = new ArrayList<Integer>();
  10. // 集合b中仅仅能存储Integer类型的对象
  11. b.add(6);
  12. b.add("abc");   // 报错.执行时凝视掉
  13. System.out.println(a.getClass() == b.getClass());
  14. // 输出结果为    true
  15. /*
  16. *  原因:泛型执行时具有擦除功能;ArrayList<String>和ArrayList<Integer>擦除
  17. *  后的类型为ArrayList
  18. */
  19. }
  20. }

每一个类都有一个class属性,该样例同一时候说明使用泛型不会改变class属性的返回值。

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

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

Java泛型擦除的更多相关文章

  1. 关于Java泛型"擦除"的一点思考

    头次写博客,想说的东西不难,关于泛型的疑问,是前一阵在学习jackson中遇到的. 下面就把我所想到的.遇到的,分享出来. 泛型是JDK1.5后的一个特性,是一个参数类型的应用,可以将这个参数声明在类 ...

  2. JAVA泛型-擦除

    package com.xt.thinks15_7; import java.util.Arrays; class EraseObject1<A> { } class EraseObjec ...

  3. [转] Java 的泛型擦除和运行时泛型信息获取

    原文链接 https://my.oschina.net/lifany/blog/875769 前言 现在很多程序员都会在简历中写上精通 Java.但究竟怎样才算是精通 Java 呢?我觉得不仅要熟练掌 ...

  4. Java泛型的历史

    为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...

  5. Java 泛型 Java使用泛型的意义

    Java 泛型 Java使用泛型的意义 @author ixenos 直接意义 在编译时保证类型安全 根本意义 a) 类型安全问题源自可复用性代码的设计,泛型保证了类型安全的复用模板 b) 使用复用性 ...

  6. java 泛型基础问题汇总

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...

  7. Java泛型读书笔记 (二)

    关于Java泛型擦除后,继承一个泛型类带来的问题 有如下泛型类Pair: public class Pair<T> { private T second; private T first; ...

  8. 重学Java泛型

    一丶从字节码层面看范型擦除 public class Type1<T> { private T t; } 使用jclasslib插件查看其字节码: 可以看到 t属性的类型是List< ...

  9. 【Java心得总结四】Java泛型下——万恶的擦除

    一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...

随机推荐

  1. 学习 JSP:第二步 创建一个JSP Web Project

    接上文 学习 JSP:第一步Eclipse+Tomcat+jre(配置环境) [创建新工程](Dynamic Web Project) 1.选择 "File-->New-->Dy ...

  2. 如何应对pm2.5

    细颗粒物又称细粒.细颗粒.PM2.5:指环境空气中空气动力学当量直径小于等于 2.5 微米的颗粒物,也称细颗粒物.能较长时间悬浮于空气中,其在空气中含量(浓度)越高,就代表空气污染越严重.可吸入颗粒物 ...

  3. python object与dict互相转换

    代码如下 # 将class转dict,以_开头的属性不要 def props(obj): pr = {} for name in dir(obj): value = getattr(obj, name ...

  4. GC overhead limit exceeded,tomcat修改jvm内存

    tomcat修改jvm内存 内存大小:-Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=512m -Dja ...

  5. Bzoj2038 小Z的袜子(hose)

    Time Limit: 20000MS   Memory Limit: 265216KB   64bit IO Format: %lld & %llu Description 作为一个生活散漫 ...

  6. hdu 5459(递推好题)

    Jesus Is Here Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)To ...

  7. AC日记——狼抓兔子 bzoj 1001

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  8. Vue.js实战:初识Vue.js

    一.Vue.js是什么 简单小巧的核心,渐进式技术栈,足以应付任何规模的应用. 简单小巧指的是Vue.js 压缩后大小仅有17KB 所谓渐进式(Progressive)就是你一步一步,有阶段性地来使用 ...

  9. PyTorch学习笔记之DataLoaders

    A DataLoader wraps a Dataset and provides minibatching, shuffling, multithreading, for you. import t ...

  10. Android 中的Canvas画图

    Android中有一个Canvas类,Canvas类就是表示一块画布,你可以在上面画你想画的东西.当然,你还可以设置画布的属性,如画布的颜色/尺寸等.Canvas提供了如下一些方法: Canvas() ...