上代码 
DAO类的泛型方法 
方法一 public <T> T getByPK(Integer arg) 
{
   Class<T> entityClass =(Class<T>) ((ParameterizedType) getClass()
            .getGenericSuperclass()).getActualTypeArguments()[0];
    return (T)this.getHibernateTemplate().get(entityClass, arg);
}
Service的调用报错 
java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType 
方法二 public <T> T getByPK(Class<T> entityClass,Integer arg) 
{
   return (T)this.getHibernateTemplate().get(entityClass, arg);
}调用成功的 我的错误在那里。
这方法有什么不一样吗?怎么调用?望高手详解。 

解决方案 »

  1.   

    会debug么 。看下这段执行的时候每个参数是什么类型的。
     Class <T> entityClass =(Class <T>) ((ParameterizedType) getClass() 
                .getGenericSuperclass()).getActualTypeArguments()[0]; 
    你这里有类型强制转化错误。
      

  2.   

     getClass() 
                .getGenericSuperclass()).getActualTypeArguments()[0]; 
    这句返回的应该是个lang ,你把它转ParameterizedType了。
      

  3.   

    定义函数的直接基类是泛型才行。
    if(ArrayList.class.getGenericSuperclass() instanceof ParameterizedType){
    System.out.println("OK");
    }
    if(String.class.getGenericSuperclass() instanceof ParameterizedType){
    System.out.println("Nerver run here");
    }
      

  4.   

       是得到泛型class的问题
      http://www.javaeye.com/problems/1560     看看这个贴  希望对楼主有帮助
      

  5.   

    方法一public <T> T getByPK(Integer arg)
    {
      Class <T> entityClass =(Class <T>) ((ParameterizedType) getClass()
                .getGenericSuperclass()).getActualTypeArguments()[0];
        return (T)this.getHibernateTemplate().get(entityClass, arg);
    }
    Service的调用报错
    java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
    方法二public <T> T getByPK(Class <T> entityClass,Integer arg)
    {
      return (T)this.getHibernateTemplate().get(entityClass, arg);
    }调用成功的 方法一种类型T并不明确 并且你强转还是一个未知类型T
    方法二中T是你传的Class<T> entityClass类型,你调用这个方法的时候类型已经明确了