java泛型类型擦除

 

先上一段代码,猜猜会出现的问题

 

 

	public void test(List<String> value){
		System.out.println("List<String> value");
	}
	public void test(List<Integer> value){
		System.out.println("List<Integer> value");
	}

 

 

很,不幸编译不通过,下面让我们来分析一下为什么。

 

真假泛型,早在java出现泛型之前,c#中存在泛型了,c#中的泛型无论在源码中还是编译后都是真实存在的(编译后是一个占位符),基于这种实现的泛型我们称之为真泛型。那么java呢,java的泛型只是存在源码中,javac编译后字节码中就被替换成原生类型,所以运行阶段List<String>与 List<Integer> 是同一类型,基于这种泛型实现的我们称之伪泛型。那么运行时类型是如何区分的呢,其实编译阶段在相应地方插入了强制转化类型代码。java中泛型实现方法称为泛型擦除。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值