论坛首页 入门技术论坛

为什么运行时取不到泛型T,难道你们觉得没必要吗

浏览 15112 次
该帖已经被评为新手帖
作者 正文
   发表时间:2012-02-01  
icezx 写道
peak 写道
反正是娶不到,只能取到父类的泛型

可以取得到,但是需要改造一下,详见 江南白衣那个文章

绝对取得到...  我自己用别人的代码取过,一时翻不出来你们看.好像是vcok那个代码
0 请登录后投票
   发表时间:2012-02-01  
yoyo837 写道
icezx 写道
peak 写道
反正是娶不到,只能取到父类的泛型

可以取得到,但是需要改造一下,详见 江南白衣那个文章

绝对取得到...  我自己用别人的代码取过,一时翻不出来你们看.好像是vcok那个代码


可以取到的,比较绕的一种办法。
具体可以参考fastjson中的TypeReference的用法和实现:
http://code.alibabatech.com/wiki/display/FastJSON/TypeReference
0 请登录后投票
   发表时间:2012-02-01  
wenshao 写道
yoyo837 写道
icezx 写道
peak 写道
反正是娶不到,只能取到父类的泛型

可以取得到,但是需要改造一下,详见 江南白衣那个文章

绝对取得到...  我自己用别人的代码取过,一时翻不出来你们看.好像是vcok那个代码


可以取到的,比较绕的一种办法。
具体可以参考fastjson中的TypeReference的用法和实现:
http://code.alibabatech.com/wiki/display/FastJSON/TypeReference

复杂类型用一个匿名类来记录它的泛型,这主意挺好,不过对lz来说,感觉上没有必要
幸运的是(或者其实是不幸?),lz要用到的callback一般情况下并非通用的,于是对于不同的callback,因为泛型参数已固定在某一具体类里,所以可以取了,不过这个保证不够实在啊
终究来说运行时是没有参数了,要取只能取到类的参数,取不到对象的参数
0 请登录后投票
   发表时间:2012-02-01  
gtssgtss 写道
wenshao 写道
yoyo837 写道
icezx 写道
peak 写道
反正是娶不到,只能取到父类的泛型

可以取得到,但是需要改造一下,详见 江南白衣那个文章

绝对取得到...  我自己用别人的代码取过,一时翻不出来你们看.好像是vcok那个代码


可以取到的,比较绕的一种办法。
具体可以参考fastjson中的TypeReference的用法和实现:
http://code.alibabatech.com/wiki/display/FastJSON/TypeReference

复杂类型用一个匿名类来记录它的泛型,这主意挺好,不过对lz来说,感觉上没有必要
幸运的是(或者其实是不幸?),lz要用到的callback一般情况下并非通用的,于是对于不同的callback,因为泛型参数已固定在某一具体类里,所以可以取了,不过这个保证不够实在啊
终究来说运行时是没有参数了,要取只能取到类的参数,取不到对象的参数


callback是一个接口。里面只有一个doInmybatis方法让子类去实现。 “callback一般情况下并非通用的”是啥意思
0 请登录后投票
   发表时间:2012-02-01  
java的泛型实现的不彻底,和C#的没法比,到了运行时就歇菜了。
0 请登录后投票
   发表时间:2012-02-01  
icezx 写道
gtssgtss 写道
wenshao 写道
yoyo837 写道
icezx 写道
peak 写道
反正是娶不到,只能取到父类的泛型

可以取得到,但是需要改造一下,详见 江南白衣那个文章

绝对取得到...  我自己用别人的代码取过,一时翻不出来你们看.好像是vcok那个代码


可以取到的,比较绕的一种办法。
具体可以参考fastjson中的TypeReference的用法和实现:
http://code.alibabatech.com/wiki/display/FastJSON/TypeReference

复杂类型用一个匿名类来记录它的泛型,这主意挺好,不过对lz来说,感觉上没有必要
幸运的是(或者其实是不幸?),lz要用到的callback一般情况下并非通用的,于是对于不同的callback,因为泛型参数已固定在某一具体类里,所以可以取了,不过这个保证不够实在啊
终究来说运行时是没有参数了,要取只能取到类的参数,取不到对象的参数


callback是一个接口。里面只有一个doInmybatis方法让子类去实现。 “callback一般情况下并非通用的”是啥意思


List是一个接口,ArrayList是一个常用的具体类,ArrayList就是通用的,例如无论ArrayList<String>还是ArrayList<Integer>,都不需要新的类
callback的话,一般是一个SQL对应一个callback的实现类吧,如果是这样当然就不通用了,莫非lz弄出了一个可以处理任何sql的callback?
0 请登录后投票
   发表时间:2012-02-01  
gtssgtss 写道
icezx 写道
gtssgtss 写道
wenshao 写道
yoyo837 写道
icezx 写道
peak 写道
反正是娶不到,只能取到父类的泛型

可以取得到,但是需要改造一下,详见 江南白衣那个文章

绝对取得到...  我自己用别人的代码取过,一时翻不出来你们看.好像是vcok那个代码


可以取到的,比较绕的一种办法。
具体可以参考fastjson中的TypeReference的用法和实现:
http://code.alibabatech.com/wiki/display/FastJSON/TypeReference

复杂类型用一个匿名类来记录它的泛型,这主意挺好,不过对lz来说,感觉上没有必要
幸运的是(或者其实是不幸?),lz要用到的callback一般情况下并非通用的,于是对于不同的callback,因为泛型参数已固定在某一具体类里,所以可以取了,不过这个保证不够实在啊
终究来说运行时是没有参数了,要取只能取到类的参数,取不到对象的参数


callback是一个接口。里面只有一个doInmybatis方法让子类去实现。 “callback一般情况下并非通用的”是啥意思


List是一个接口,ArrayList是一个常用的具体类,ArrayList就是通用的,例如无论ArrayList<String>还是ArrayList<Integer>,都不需要新的类
callback的话,一般是一个SQL对应一个callback的实现类吧,如果是这样当然就不通用了,莫非lz弄出了一个可以处理任何sql的callback?


这个是1..N个SQL对应一个callback,但是此处就用来查询,当然用于修改啊,删除也没问题,只不过方法名被我叫成exectuteQuery了。 callback来实现什么主要由我传入的T也就是最后将转换成Mybatis的mapper里的具体方法决定,使用的人只需要决定需要调用mapper里的何种方法
0 请登录后投票
   发表时间:2012-02-01  
能取到啊 取父类的啊 详情请参照Hibernate https://community.jboss.org/wiki/GenericDataAccessObjects
0 请登录后投票
   发表时间:2012-02-01  
callback.getClass();  去获取T的类型, 前提,  callback是你MybatisCallBack的一个子类实现,否者你就取到了Object
0 请登录后投票
   发表时间:2012-02-01   最后修改:2012-02-01
icezx 写道
public <T> Object executeQuery(MybatisCallBack<T> callback){

   。。。。。。。。。。。。
}

这是小弟的代码。我想在方法内部取得方法签名里MybatisCallBack<T> callback 的类型T的类型和类型名,一直
找不到可以取的T的方法,

无奈之下多放了一个参数进来
public <T> Object executeQuery(MybatisCallBack<T> callback, Class<T> type){
。。
}


public class Xxxxx<T> {
    private Class<T> clazz;

    public Xxxxx() {
        Type genericType = this.getClass().getGenericSuperclass();
        Type[] params = ((ParameterizedType) genericType).getActualTypeArguments();
        clazz = (Class<T>)params[0];
    }

    public <T> Object executeQuery(MybatisCallBack<T> callback){
        Class<T> type = clazz;
    }

}

0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics