您的位置:首页 > 编程语言 > Java开发

jdk1.5新特性之泛型总结2

2013-04-22 15:55 351 查看
泛型除了可以用在变量上,还可以用在方法上和类上.

自定义泛型一般用<T>或者<E>来声明.

1.用在方法上.在返回值类型前声明.

例如:

//将一个Object对象转换成指定的类型.

public static <T>T convert(Object obj)

{

return (T)obj;

}

实际使用时,指定的是什么类型 则T就是什么类型.

2.用在类上

当一个类中有多个方法都用到了泛型.如果都定义成泛型方法,则这些泛型间没有关联.

Class Dao

{

public <T>void add(T t){}

public <T>T findByID(int ID)

{

return null;

}

}//这两个方法中的T没有关联,有可能 出现"添加了一只猫,但是查找到一只狗"的情况.

为了统一,这时可以将泛型定义在类上 Class Dao<T>,这样类中所有的方法的泛型T都是同一个类型.

在Class Dao<T>中如果有静态方法要使用泛型,只能在该方法上单独定义.

注意:

当一个变量被声明为泛型时,只能被实例变量、方法和内部类调用,而不能被静态变量和静态方法调用。因为静态成员是被所有参数化的类所共享的,所以静态成员不应该有类级别的类型参数。

3.关于泛型的类型推断.

这个非常复杂.只能记住下面两个特殊的例子了...
//将数组中数据拷贝到集合中
public <T>void(Vector<T> v,T[] t){} 如果Vector<String> 则T的类型就是String 数组必须也是String[] 这是泛型的传播..

//讲数组中的数据拷贝到数组中
public <T>void(T[] t1,T[] t2){} 如果t1和t2的类型不一致,则向上取他们的最小父类,比如Integer和Float 则T的类型是Number
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: