文档章节

java泛型-类型擦除

一杯82年的JAVA
 一杯82年的JAVA
发布于 2016/08/03 23:10
字数 320
阅读 33
收藏 0

最近了解了一下java的泛型,了解到了“类型擦除”这个东西,现做个简单小结。

java泛型实现的原理可以说就是类型擦除

可以这么理解,如ArrayList<Integer>在编译后变成了ArrayList<Object>,其他类型也是,都变成了原始类型,可以说他的泛型主要是为了防止错误的类型强转。

利用反射可以跳过它的泛型限制:

import java.lang.reflect.Method;
import java.util.ArrayList;

public class 泛型 {

	public static void main(String[] args) throws Exception {
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(1);
		list.add(2);
		// list.getClass().getMethod("add", Object.class).invoke(list, "ssss");
		Class c = list.getClass();
		System.out.println(c);
		Method m = c.getMethod("add", Object.class);
		m.invoke(list, "其实,我是字符串");
		m.invoke(list, new User("小明", 16));// 放自己写的类实例
		m.invoke(list, new User("小红", 14));
		System.out.println("\nget():" + list.get(3) + "\n");
		for (Object x : list)
			System.out.println(x.getClass() + ":  " + x);
	}
}

输出:

class java.util.ArrayList

get():User [name=小明, age=16]

class java.lang.Integer:  1
class java.lang.Integer:  2
class java.lang.String:  其实,我是字符串
class code.User:  User [name=小明, age=16]
class code.User:  User [name=小红, age=14]

初步认识,等再了解深点再总结。

© 著作权归作者所有

一杯82年的JAVA
粉丝 8
博文 76
码字总数 36575
作品 0
杭州
程序员
私信 提问
【J2SE】JAVA语法糖之-伪泛型

JAVA语法糖之-伪泛型 泛型即参数化类型 首先看一个泛型例子: public static void main(String[] args) {List<String> strList = new ArrayList<String>();strList.add("generic test!");fo......

磊神Ray
2011/09/28
686
0
10 道关于 Java 泛型的面试题

1.Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中。那些拥有Java1.4或更早版本的开发背景的人都知道...

蚂蚁-Declan
2018/10/24
169
0
【转】Java语法糖的味道:泛型与类型擦除

泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类...

mj4738
2011/11/29
326
0
java 泛型-擦除erasure

类型擦除(type erasure)。 Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候...

110hxl
2014/02/11
210
0
提给程序员和开发者的 10 道 Java 泛型面试题

关于泛型的面试题在 Java面试中变得越来越常见,因为 Java 5问世已经有相当长的时间了,越来越多的应用已经迁移到Java 5上来了,并且几乎所有新的Java开发工作也都是在Tiger(Java 5的项目代号...

lwei
2013/10/18
13.6K
30

没有更多内容

加载失败,请刷新页面

加载更多

db.properties

jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=falsejdbc.username=rootjdbc.pas......

行者终成事
19分钟前
3
0
从 Storm 到 Flink,汽车之家基于 Flink 的实时 SQL 平台设计思路与实践

在 2019 年之前,之家的大部分实时业务都是运行在 Storm 之上的。Storm 作为早期主流的实时计算引擎,凭借简单的 Spout 和 Bolt 编程模型以及集群本身的稳定性,俘获了大批用户。下图是实时计...

阿里云官方博客
19分钟前
4
0
网络安全-Day04

2.1.1 什么是SQL注入 2.1.2 注入分类 2.1.3 MySQL手工注入 2.1.4 sqlmap使用 2.1.5 总结 什么是SQL注入 SQL注入漏洞原理 什么是SQL 结构化查询语言(Structured Query Language),是一种特殊目...

Jerry1101
19分钟前
3
0
docker容器内安装yum,vim等命令,以及配置ls指令

使用国内镜像 mv /etc/apt/sources.list /etc/apt/sources.list.bakecho "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.listecho "deb http://......

长恭
20分钟前
3
0
超详细的MySQL8.0.17版本安装教程

下载MySQL MySQL的官网地址:https://www.mysql.com/。 如下图所示: 然后点击DOWNLOADS ==> Community,选择MySQL Community Server。如图所示: 滑到页面的最下面,找到Recommended Downl...

彩色泡泡糖
23分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部