详细内容:http://blog.csdn.net/lonelyroamer/article/details/7927212
概要:
一、泛型即“参数化类型”。所操作的数据类型被指定为一个参数,在用到的时候在指定具体的类型。
这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。
泛型类:
class Pair<T> {
private T value;
public Pair(T value) {
this.value=value;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
泛型接口:
interface Show<T,U>{
void show(T t,U u);
}
class ShowTest implements Show<String,Date>{
@Override
public void show(String str,Date date) {
System.out.println(str);
System.out.println(date);
}
}
泛型方法:
public static <T, U> T get(T t, U u) {
if (u != null)
return t;
else
return null;
}
泛型变量的类型限制:
1、不管该限定是类还是接口,统一都使用关键字 extends
2、可以使用&符号给出多个限定,比如
public static <T extends Comparable&Serializable> T get(T t1,T t2)
3、如果限定既有接口也有类,那么类必须只有一个,并且放在首位置
public static <T extends Object&Comparable&Serializable> T get(T t1,T t2)
二、
1、类型擦除后保留的原始类型,即在字节码文件中类型变量被擦除(crased),并使用其限定类型(无限定的变量用Object)替换
2、泛型方法实现多态:桥方法
3、泛型类型变量不能是基本数据类型,必须是其包装类、自定义类
4、不能声明参数化类型的数组
5、不能实例化泛型类型
6、泛型类中的静态方法和静态变量不可以使用泛型类所声明的泛型类型参数
三、
1、泛型中的?通配符:? 未知类型,一般用于集合中
public static void printCollection(Collection<?> collection)