例子:
public interface GenericDao<T extends Serializable, PK extends Serializable>public class GenericDAOImpl<T extends Serializable, PK extends Serializable>
        extends HibernateDaoSupport implements GenericDao<T, PK> 1.service中直接使用   
GenericDAOImpl<User, Integer> userDAO = new GenericDAOImpl<User, Integer>(sessionFactory, User.class);   
  
2.继承出子DAO   
interface IUserDAO extends GenericDAO<User, Integer>   
  
class UserDAOImpl extends GenericDAOImpl<User, Integer> implements IUserDAO  
作为底层的service,DAO我不确定<User, Integer>,这两个参数,有可能是其他的对象,比如<News, Long><Shop, Integer>等,我该如何灵活继承调用?谢谢!

解决方案 »

  1.   

    假如是class UserDAOImpl extends GenericDAOImpl<User, Integer>的情况,在GenericDAOImpl中间添加如下代码,可以动态获取<User, Integer>    // UserDAOImpl类型
        Class<?> clazz = getClass();
        // UserDAOImpl中的泛型参数
        Class<? extends Serializable> infoType = (Class<? extends Serializable>) ((ParameterizedType) clazz
            .getGenericSuperclass()).getActualTypeArguments()[0];
        Class<? extends Serializable> pkType = (Class<? extends Serializable>) ((ParameterizedType) clazz
            .getGenericSuperclass()).getActualTypeArguments()[1];
      

  2.   

    你现在的base class,不知道<T extends Serializable, PK extends Serializable>的实际类型,以上代码就是告诉你实际类型怎么取。
      

  3.   

    你没看懂我的意思,不是动态获取User实例,是动态使用这个DAO,现在是写死的<User, Integer>,要每个实例都写一个DAO,太麻烦了。