我们最先接触泛型是在哪里?我像大家都应该是这个:
List<String> list = new ArrayList<String>();
这样的话,这个链表就只能存放String类型的参数(不考虑通过反射绕过编译器存其他类型的参数这样的行为),以及取值等都是String。这就是一个泛型类,那么我们如何自定义我们的泛型类?(注意不要解决T能不能写出别的。比如说E了什么的。。确实是能写成E,不管是T,E都只是一个代替,随便)
* 我是Android
* 曾经写数据库框架,或者封装别的数据库框架来使用时必须用 到这个
* 因为每一个实体类都有基本的增删改查的功能,而每一个实体类都对应一个Dao
* 而如果没有这个泛型基类,那么每一个Dao都得写一次相同的增删改查代码,然后将实体类改为自身的
* 这样 很low
* @author wrf
*
* @param <T>
*/
public class BaseDao<T> {
/**
* 存
* @param list
*/
public void add(List<T> list){
}
/**
* 删
* @param id
*/
public void delete(int id){
}
/**
* 存或者修改
* @param t
*/
public void update(T t){
}
/**
* 查
* @param id
* @return
*/
public T findById(int id){
return null;
}
}
有人可以会问,为什么要这样,自定义泛型方法就可以了,因为如果不这样的话,自定义泛型方法之间是无法相互约束的,也就是说虽然看起来都是T,但是根本没有关系,add方法我可以放String对象,findById方法返回来我可以用int接收,而这,显然是不对的。。如果用类泛型的话,类内的所有T都是类的泛型,都被约束了,这样才是一个开发正常需要的。
值得注意的是,如果是一个静态方法那么它不与类的泛型有任何关系,他认不得类泛型,它可以自己定义方法泛型,但是不与类有任何关联,很容易理解,因为类泛型是面向对象的,只有对象存在的时候才可以使用,而静态方法的执行不需要对象。