一、概述
1、如果类的实例对象中的多处都要用到同一个泛型参数,即这些地方引用的泛型类型要保持同一个实际类型时,这时候就要采用泛型类型的方式进行定义,也就是类级别的泛型,语法格式如下:
public class GenericDao<T> {
private T field1;
public void save(T obj){}
public T getById(int id){}
}
2、类级别的泛型是根据引用该类名时指定的类型信息来参数化类型变量的,例如,如下两种方式都可以:
GenericDao<String> dao = null;
new genericDao<String>();
注:
在对泛型类型进行参数化时,类型参数的实例必须是引用类型,不能是基本类型。 当一个变量被声明为泛型时,只能被实例变量和方法调用(还有内嵌类型),而不能被静态变量和静态方法调用。因为静态成员是被所有参数化的类所共享的,所以静态成员不应该有类级别的类型参数。
二、代码说明
1、GenericDao.java
package staticimport.generic.clazz;
import java.util.Set;
public class GenericDao<T> {
public void add(T entity){
}
public void removeById(Integer id){
}
public void remove(T entity){
}
public void update(T entity){
}
public T findById(Integer id){
return null;
}
public Set<T> findByCondition(String whereClause){
return null;
}
}
2、GenericClassTest.java
package staticimport.generic.clazz;
import staticimport.reflect.introspector.ReflectPoint;
public class GenericClassTest {
public static void main(String[] args) {
GenericDao<ReflectPoint> genericDao = new GenericDao<>();
genericDao.add(new ReflectPoint());
genericDao.remove(new ReflectPoint());
genericDao.update(new ReflectPoint());
genericDao.findByCondition("dddd");
}
}