泛型的定义,在类名之后跟上<类型>,如ArrayList<String> collection = new ArrayList<String>();泛型内只能装指定类型的数据,如上例就只能装String类型的数据;
只有在JDK的api中,说明了一个类是泛型类型,该类才能使用泛型;使用泛型可以省去强制类型转换的麻烦;泛型是提供给编译器使用的,编译之后的字节码中不会在有泛型的类
型信息,所以可以利用反射的方法向编译后的泛型中添加不同类型的数据;
泛型的使用中,Class<?>y=Class<String>x //正确,Class<String>x=Class<?>y //错误
定义一个方法交换一个数组中两个元素的位置:
public <T> void swap(T [] array, int i,int j){
//<T>声明了一个任意类型的变量
T temp= array[i];
array[i]=array[j];
array[j]=temp;
}
写一个泛型方法,自动将Object类型的对象转换成其他类型:
public <T> T autoConvert(Object obj){
return (T) obj;
}
定义一个方法,可以将任意类型的数组中的所有元素填充为相应类型的某个对象:
public <T> void fillArray(T [] array,T obj){
for(int i=0;i<array.length;i++){
array[i]=obj;
}
}
采用自定义泛型方法的方式打印出任意参数化类型的集合中的所有内容:
public <T> void printCollection(Conlection<T> collection){
for(Object obj : collection){
System.out.println(obj);
}
}
若想让一个类的两个泛型方法中的泛型参数一致,则可以将该参数放在类上,如想在如下代码中让两个方法的<T>一致:
public class GenericDao{
public <T> void add(T x){
}
public <T> T findById(int id){
return null;
}
}
可以将代码改为:
public class GenericDao<T>{
public void add(T x){
}
public T findById(int id){
return null;
}
}
类中的静态方法不能使用泛型类型;