//使用泛型化的Dao接口
public interface IBaseDao<T>{
public void save(T t);
public List<T> getAll();
...
}
//实现类XXBaseDaoImpl在实现IBaseDao<T>时,也需要提供泛型化的参数T
public class UserDaoImpl<User> implements IBaseDao<User>{
public void save(User t);
public List<User> getAll();
...
}
其实这样还看不出好处,如果有AbstractBaseDao则能看出
public interface IBaseDao<T>{
public void save(T t);
public List<T> getAll();
...
}
public abstract class AbstractBaseDao<T> implements IBaseDao<T>{
public void save(T t){
...
}
public List<T> getAll(){
...
}
...
}
则实现类什么都不写即可,
public class UserDaoImpl extends AbstractBaseDao<User>{
}
public class OrderDaoImpl extends AbstractBaseDao<Order>{
}
业务层接口也可以采用类似dao的写法:
public interface IBaseService<T>{
public void save(T t);
public List<T> getAll();
}
//业务层实现类采用Base<U,T extends BaseModel>的形式
public class BaseServiceImpl<E, D extends IBaseDao<E>> implements IBaseService<E> {
//Dao接口变量,
protected D dao;
public void save(E e){
...
}
public List<E> getAll(){
....
}
//对dao接口变量进行setter和getter设置
public void setDao(D dao) {
this.dao = dao;
}
public D getDao() {
return dao;
}
}
public class Base<U,T extends BaseModel>还有这种用法
要求泛型T必须extends BaseModel
@Inherited的作用
@Inherited:允许子类继承父类的注解
http://zy19982004.iteye.com/blog/1979520
泛型类的继承
猜你喜欢
转载自rd-030.iteye.com/blog/1870127
今日推荐
周排行