weixin_42351653 2009-12-11 09:35
浏览 228
已采纳

泛型方法问题

上代码
DAO类的泛型方法
方法一
[code="java"]public T getByPK(Integer arg)
{
Class entityClass =(Class) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
return (T)this.getHibernateTemplate().get(entityClass, arg);
}[/code]
Service的调用报错
java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
方法二
[code="java"]public T getByPK(Class entityClass,Integer arg)
{
return (T)this.getHibernateTemplate().get(entityClass, arg);
}[/code]调用成功的

这方法有什么不一样吗?怎么调用?望高手详解。

  • 写回答

1条回答 默认 最新

  • iteye_19907 2009-12-11 13:17
    关注

    这个问题是这样,let me tell you

    我用List来举个例子

    class ArrayList implement List{
    T get(i)
    }

    使用的时候
    l=new ArrayList() 等价于 new ArrayList()
    l=new ArrayList();
    这时T等价于MyObj
    这个时候 l.get(i) 等价于 MyObj get(i)。

    使用泛型的时候我们要让java知道泛型到底是什么型,像上面我们告诉他,泛型T是MyObj类型。在构造对象的时候告诉了java。

    public T getByPK(Integer arg) ,这样的泛型是加在方法上的泛型。这个T没有在class上面定义,仅仅是针对这个方法的。所以必须在方法的参数中指明类型。

    比如我写过这样的代码
    T getParam(HttpRequest request,String name,T defaultValue){
    v=request.getParam(name)
    if v==null return defaultValue;
    return convertTo(v,defaultValue.getClass());
    }

    T convertTo(String value,Class type){
    Object result = ....
    return (T) result;
    }

    understand?你必须告诉java,T是什么类型,getParma方法通过T defaultValue,用defaultValue的值,convertTo方法,用type的类型。而你的第一个方法getByPk(Integer arg)没有告诉。

    泛型DAO设计:

    GenericDao{
    T getByPk(ID)
    update(T)
    save(T)
    delete(T)
    List findAll()
    }

    class MyDao extends GenericDao{

    }
    class MyDao2 extends GenericDao{

    }
    OK,结束了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用