范型的一些要点

1、静态变量不能用范型
[code]
public class MyGen<T>{
private static T;//错误的
}
[/code]
2、范型的定义不会被继承,若A是B的子类,C是一个声明了范型定义的类型,C(A)不是C(B)的子类
[code]
List<String> l = new ArrayList<String>();
List<Object> o = l;//错误的
[/code]

3、范型函数的使用
[code]
public <T> void fromArrayToCollection(T[] a,Collection<T> c){
for(T o:a){
c.add(o);
}
}
[/code]
如果一个函数的参数类型与函数返回的参数没有必然关联,同时对于该函数其他的参数的类型也没有依赖关系,那么我们就应该使用统配符?,否则就应该使用泛型函数。这可以参考java.util包中collection类型的一些方法的定义:
static void swap(List<?> list, int i, int j)
static <T> void copy (List<? super T> dest, List<? extends T> src)

4、SpringSide的用法
如果函数输入参数里含Class类型,而返回值又是该Class的实体,应该将该函数设为泛型函数。最典型的例子是HibernateGenericDao的get() 函数

[code]
public <T> T get(Class<T> entityClass, Serializable id) {
return (T) getHibernateTemplate().get(entityClass, id);
}
[/code]

其中眼花缭乱的第一个<T>声明这是一个泛型函数,第2个T声明返回值为T,第三个Class<T>代表 T.class。基类写的辛苦,但子类用得爽快

Book book = (Book)manager.get(Book.class,1) 简化成了 Book book = manager.get(Book.class,1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值