Java泛型擦除
Java泛型擦除:
什么是泛型擦除?
首先了解一下什么是泛型?我个人的理解:因为集合中能够存储随意类型的对象。可是集合中最先存储的对象类型一旦确定后,就不能在存储其它类型的对象了,否则,编译时不会报错。但执行时会抛出ClassCastException异常。为解决此问题,引入泛型,指定该集合对象中存储的对象类型,这样一旦该集合中存储了其它的对象类型,编译时会提示错误!(理解不当之处。希望大神多指点
)。
泛型的擦除就是说。在编译的时候集合中指定了确定的对象类型,但在执行时将集合中能够存储的该对象类型擦除了!
举例来说的话就是:
- import java.awt.List;
- import java.util.ArrayList;
- public class GenericDemo {
- public static void main(String[] args) {
- ArrayList<String> a = new ArrayList<String>();
- // 集合a中仅仅能存储String类型的对象
- a.add("abc");
- a.add(6); // 报错.执行时凝视掉
- ArrayList<Integer> b = new ArrayList<Integer>();
- // 集合b中仅仅能存储Integer类型的对象
- b.add(6);
- b.add("abc"); // 报错.执行时凝视掉
- System.out.println(a.getClass() == b.getClass());
- // 输出结果为 true
- /*
- * 原因:泛型执行时具有擦除功能;ArrayList<String>和ArrayList<Integer>擦除
- * 后的类型为ArrayList
- */
- }
- }
每一个类都有一个class属性,该样例同一时候说明使用泛型不会改变class属性的返回值。
注意点:Java不能创建泛型数组:由于Java中的数组都是通过反射动态建立的,在执行时,泛型会擦除类型信息,所以没有了类型信息。当然也就不能构造出数组了。
以上言语措辞或对问题的认识上有什么不当的,希望路过大神不吝赐教!
Java泛型擦除的更多相关文章
- 关于Java泛型"擦除"的一点思考
头次写博客,想说的东西不难,关于泛型的疑问,是前一阵在学习jackson中遇到的. 下面就把我所想到的.遇到的,分享出来. 泛型是JDK1.5后的一个特性,是一个参数类型的应用,可以将这个参数声明在类 ...
- JAVA泛型-擦除
package com.xt.thinks15_7; import java.util.Arrays; class EraseObject1<A> { } class EraseObjec ...
- [转] Java 的泛型擦除和运行时泛型信息获取
原文链接 https://my.oschina.net/lifany/blog/875769 前言 现在很多程序员都会在简历中写上精通 Java.但究竟怎样才算是精通 Java 呢?我觉得不仅要熟练掌 ...
- Java泛型的历史
为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...
- Java 泛型 Java使用泛型的意义
Java 泛型 Java使用泛型的意义 @author ixenos 直接意义 在编译时保证类型安全 根本意义 a) 类型安全问题源自可复用性代码的设计,泛型保证了类型安全的复用模板 b) 使用复用性 ...
- java 泛型基础问题汇总
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...
- Java泛型读书笔记 (二)
关于Java泛型擦除后,继承一个泛型类带来的问题 有如下泛型类Pair: public class Pair<T> { private T second; private T first; ...
- 重学Java泛型
一丶从字节码层面看范型擦除 public class Type1<T> { private T t; } 使用jclasslib插件查看其字节码: 可以看到 t属性的类型是List< ...
- 【Java心得总结四】Java泛型下——万恶的擦除
一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...
随机推荐
- phpMyAdmin操作之改管理员密码
1.登录phpMyAdmin 默认地址:http://localhost/phpmyadmin 2.点击用户按钮 3.往下拉找到修改密码 点执行就修改了 注意: 如果再次登录时报错提示: #1045 ...
- C++基类与派生类的转换
具体表现在以下几个方面: 派生类对象可以向基类对象赋值. 可以用子类(即公用派生类)对象对其基类对象赋值.如 A a1; //定义基类A对象a1 B b1; //定义类A的公用派生类B的对 ...
- poj 3068 Bridge Across Islands
Bridge Across Islands Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11196 Accepted: ...
- luogu 3709 大爷的字符串题 构造 莫队 区间众数
题目链接 题目描述 给你一个字符串a,每次询问一段区间的贡献 贡献定义: 每次从这个区间中随机拿出一个字符\(x\),然后把\(x\)从这个区间中删除,你要维护一个集合S 如果\(S\)为空,你\(r ...
- 37深入理解C指针之---结构体与指针
一.结构体与指针 1.结构体的高级初始化.结构体的销毁.结构体池的应用 2.特征: 1).为了避免含有指针成员的结构体指针的初始化复杂操作,将所有初始化动作使用函数封装: 2).封装函数主要实现内存的 ...
- Python struct 详解
最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...
- 二、 java中的变量与数据类型及类型转换
标识符:凡是可以自己命名的地方都叫标识符,如:类名.方法名.接口名... 1.标识符命名的规则: 由26个英文字母大小写,0-9,_或$组成,不遵守会报错. 不可以用数字开头. 不能使用关键字和保留字 ...
- react css module
<div className={style['content-warp']}></div> <div className={style.search}></d ...
- CentOS6.7安装部署LNMP(nginx1.8.0+php5.6.10+mysql5.6.12)
IP-10.0.0.8 1.安装nginx mkdir -p /server/tools cd /server/tools yum install -y pcre pcre-devel openssl ...
- Jython中文乱码问题
最近,在项目中需要用到Java代用Python的代码,并且需要传参数,因此选用了Jython包,但是,如果在调用python脚本时,出现了中文乱码的现象.代码如下: PythonInterpreter ...
