泛型讨论------危害

 

在泛型代码内部,无法获得任何有关泛型参数类型的信息。

 

例如:

 

public class TypeValue{
	
	public static void main(String[] args){

		Class c1 = new ArrayList<String>().getClass();
		Class c2 = new ArrayList<String>().getClass();

		System.out.println(c1==c2);
	}
}

 输出的结果是true

 

按照我们的意愿应该输出false,他们应该是不同的类型String和Integer,和输出的却是相同的类型,但是如果你吧

Integer放入ArrayList<Integer>中可以,放入ArrayList<String>却不可以,他们是相同的类型,却又不能放进Integer,很迷惑

 

下面的例子可解密

 

public class LostInformation{

	public static void main(Stirng[] args){

		List<Frob> list  = new ArrayList<Frob>();
		Map<Frob,Fnorkle> map = new HashMap<Frob,Fnorkle>();
		Quark<Fnorkle> quark  = new Quark<Fnorkle>();
		
		System.out.println(Arrays.toString(
			map.getClass().getTypeParameters());
		System.out.println(Arrays.toString(
			list.getClass().getTypeParameters());
		System.out.println(Arrays.toString(
			quark.getClass().getTypeParameters());
	}
}

 

输出:[E]

       [K,V]

        [Q]

 

说明:Class.getTypeParameters()将“返回一个TypeVariable对象数组,表示有泛型申明所申明的类型参数”

结果就是

        在泛型代码内部,无法获得任何有关泛型参数类型的信息

 

 

java的泛型是使用擦除来实现的,这意味当我们在使用泛型的时候,任何具体的类型信息都被擦除了,我们唯一知道的是我们在使用一个对象,因此List<String>和List<Integer>在运行时候的类型是相同的,这俩中类型都被查出了原始的类型即List.

 

 

边界<T extends HasF>申明T必须具备有类型HasF或者从HasF继承的类型,

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值