java再复习——自定义泛型类

来源:互联网 发布:ipower苹果软件下载 编辑:程序博客网 时间:2024/05/16 01:25

我们最先接触泛型是在哪里?我像大家都应该是这个:

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都是类的泛型,都被约束了,这样才是一个开发正常需要的。

值得注意的是,如果是一个静态方法那么它不与类的泛型有任何关系,他认不得类泛型,它可以自己定义方法泛型,但是不与类有任何关联,很容易理解,因为类泛型是面向对象的,只有对象存在的时候才可以使用,而静态方法的执行不需要对象。


0 0
原创粉丝点击