5.23 使用泛型替代原始类型

JDK5引入了泛型,在新代码里应优先使用泛型替代原始类型(raw type)

 

泛型相关术语:

List<E>generic type泛型
Eformal type parameter形式参数
List<String>parameterized type参数化类型
Stringactual type parameter实际参数
Listraw type原始类型
List<?>unbounded wildcard type 
<E extends Number>bounded type parameter 
<E super Number>bounded type parameter 
<T extends Comparable<T>>recursive type bound 
<? extends Number>bounded wildcard type 
<E> List<E> asList(E[] a)generic method 
String.classtype token 

 

泛型用于在编译时检查数据类型,或自动转换数据类型。在运行时,泛型会被替换为实际的类型,即在运行时,只存在List.class,不存在List<String>.class这样的类型。这称为类型擦除

注1:编译器使用type inference确定泛型的实际参数类型

注2:可以通过反射获取类似List<String>这样的“声明”,但是不能获取List<String>.class类型的对象

 

如果不希望限制类型,仍然建议使用List<Object>替代原始类型List

 

List<?>表示不清楚List里的元素类型,不能向此类型的List里添加任何元素,以下 代码编译不通过:

List<?> list=new ArrayList<String>();
list.add("bingo");//提示错误

 

List<? extends Hello>表示List里包含Hello或其子类类型的元素,List<? super Hello>表示List里包含Hello或其父类类型的元素。extends、super用于限定泛型参数范围

 

使用泛型可以减少类或方法的声明,如下2个方法,可以使用1个泛型方法替代:

	public int getValue(int value){
		return value;
	}
	
	public String getValue(String value){
		return value;
	}
	
	//泛型方法,可替代以上方法
	public <T> T getValue(T value){
		return value;
	}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值