42 自定义泛型类的运用
42 自定义泛型类的应用
l 如果类的实例对象中的多处都要用到同一个泛型参数,即这些地方引用的泛型类型要保持同一个实际类型时,这时候就要采用泛型类型的方式进行定义,也就是类级别的泛型,语法格式如下:
public class GenericDao<T> {
private T field1;
public void save(T obj){}
public T getById(int id){}
}
l 类级别的泛型是根据引用该类名时指定的类型信息来参数化类型变量的,例如,如下两种方式都可以:
Ø GenericDao<String> dao = null;
Ø new genericDao<String>();
l 注意:
Ø 在对泛型类型进行参数化时,类型参数的实例必须是引用类型,不能是基本类型。
Ø 当一个变量被声明为泛型时,只能被实例变量、方法和内部类调用,而不能被静态变量和静态方法调用。因为静态成员是被所有参数化的类所共享的,所以静态成员不应该有类级别的类型参数。
l 问题:类中只有一个方法需要使用泛型,是使用类级别的泛型,还是使用方法级别的泛型?
方法级别的泛型
package cn.zyj36.review; import java.util.Set; //dao data access object--->crud public class GenericDao<E> { public void add(E x){ } public E findById(int id){ return null; } public void delete(E obj){ } public void delete(int id){ } public void update(E obj){ } public static <E> void update2(E obj){//这个E不同于泛型类型的E } public E findByUserName(String name){ return null; } public Set<E> findByConditions(String where){ return null; } }