Java原始类型带来的擦除

本文探讨了Java泛型中的类型擦除现象,通过具体示例演示了如何将带有泛型信息的对象赋值给未指定泛型的变量,并分析了由此产生的类型信息丢失及其影响。
原始类型带来的擦除

    当把一个具有泛型信息的对象付给另一个没有泛型信息的变量时,所有尖括号里的额信息类型都将被丢弃,比如将一个List<String>类型的对象转型为List,则该List对集合元素的检查变成了类型变量的上限(即Object)。

    下面展示了这种擦除:

package me.timlong.cultivate.genericity;

class Apple<T extends Number>{
	T size;
	public Apple() {
	}
	
	public Apple(T size) {
		this.size = size;
	}
	
	public T getSize() {
		return size;
	}
	
	public void setSize(T size) {
		this.size = size;
	}
	
}
public class ErasureTest {
	public static void main(String[] args) {
		Apple<Integer> apple = new Apple<Integer>(6);
		
		//apple的getSize()方法返回Integer对象
		Integer size = apple.getSize();
		//把apple对象 赋给aa对象,将会丢失<>里的类型信息
		Apple aa = apple;
		//aa只知道size的类型信息是Number
		Number num = aa.getSize();
		//下面的这行代码将会引起错误
		Integer intNum = aa.getSize();
		
//		System.out.println("size : " + size + "\nnum : " + num + "\nintNum : " + intNum );
	}
}

       从上面的程序中可以看出,当把一个带泛型信息的Java对象赋给不带泛型信息的对象时,Java程序会发生擦除,这种擦除不仅会擦除使用该Java类时传入的类型实参,而且会擦除所有的泛型信息。因此,当我们在Java中使用带泛型信息的类时,需要明确具体的泛型信息,防止Java擦除的发生。

    再见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值