<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    DANCE WITH JAVA

    開發(fā)出高質(zhì)量的系統(tǒng)

    常用鏈接

    統(tǒng)計

    積分與排名

    好友之家

    最新評論

    利用反射取得泛型信息

    一、傳統(tǒng)通過反射取得函數(shù)的參數(shù)和返回值

    import ?java.lang.reflect.Method;
    import ?java.lang.reflect.ParameterizedType;
    import ?java.lang.reflect.Type;
    import ?java.util.ArrayList;
    import ?java.util.Map;
    import ?java.util.List;
    import ?java.util.Set;
    ?

    import ?sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
    ?
    public ? class ?Foo {
    ????
    public ? static ? void ?main(String[]?args)? throws ?Exception? {
    ?????Method[]?methods?
    = ?Foo. class .getDeclaredMethods();
    ?????
    for (Method?method?:?methods) {
    ??????Class[]?paramTypeList?
    = ?method.getParameterTypes();
    ??????
    ??????Class?returnType?
    = ?method.getReturnType();
    ??????System.out.println(returnType);
    ??????
    for (Class?clazz:paramTypeList) {
    ??????????System.out.println(clazz);
    ??????}

    ??????System.out.println();
    ?????}

    ?}

    ????
    public ? static ?String?test1(String?str) {
    ?????
    return ? null ;
    ????}

    ????
    public ? static ?Integer?test2(String?str,Integer?i) {
    ?????
    return ? null ;
    ????}

    ???
    }



    二、在有泛型的時候,取得參數(shù)和返回值的集合類的泛型信息

    import ?java.lang.reflect.Method;
    import ?java.lang.reflect.ParameterizedType;
    import ?java.lang.reflect.Type;
    import ?java.util.ArrayList;
    import ?java.util.Map;
    import ?java.util.List;
    import ?java.util.Set;

    import ?sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;

    public ? class ?Foo? {
    ????
    public ? static ? void ?main(String[]?args)? throws ?Exception? {
    ????????Method[]?methods?
    = ?Foo. class .getDeclaredMethods();
    ????????
    for ?(Method?method?:?methods)? {
    ????????????System.out.println(
    " returnType: " );
    ????????????Type?returnType?
    = ?method.getGenericReturnType();
    ????????????
    if ?(returnType? instanceof ?ParameterizedType) {
    ????????????????Type[]?types?
    = ?((ParameterizedType)returnType).getActualTypeArguments();
    ????????????????
    for (Type?type:types) {
    ????????????????????System.out.println(type);
    ????????????????}

    ????????????}

    ????????????System.out.println(
    " paramTypeType: " );
    ????????????Type[]?paramTypeList?
    = ?method.getGenericParameterTypes();
    ????????????
    for ?(Type?paramType?:?paramTypeList)? {
    ????????????????
    if ?(paramType? instanceof ?ParameterizedType) {
    ????????????????????Type[]?types?
    = ?((ParameterizedType)paramType).getActualTypeArguments();
    ????????????????????
    for (Type?type:types) {
    ????????????????????????System.out.println(type);
    ????????????????????}

    ????????????????}

    ????????????}

    ????????}

    ????}


    ????
    public ? static ?List < String > ?test3(List < Integer > ?list)? {
    ????????
    return ? null ;
    ????}


    ????
    private ? static ?Map < String,?Double > ?test4(Map < String,?Object > ?map)? {
    ????????
    return ? null ;
    ????}


    }

    三、應用環(huán)境
    例如你要寫一個程序,需求把一個如下的配置文件變成一個集合類。

    < config?name = " Foo.DoubleBean " >
    ????
    < element?key = " key1 " ?value = " 1.1 " />
    ????
    < element?key = " key2 " ?value = " 2.2 " />
    ????
    < element?key = " key3 " ?value = " 3.3 " />
    </ config >

    根據(jù)用戶的參數(shù)變成不同的集合類 Map<String.String>???? Map<String,Double>?? Map<String,Float>
    如果你要著手開發(fā)一個框架,這樣的需求會比較常見。這個時候取到setXX()函數(shù)的參數(shù),就可以對應上邊的問題了。

    posted on 2007-02-10 23:24 dreamstone 閱讀(3830) 評論(0)  編輯  收藏 所屬分類: jdk相關(guān)

    主站蜘蛛池模板: 亚洲午夜福利在线视频| 亚洲最大无码中文字幕| 9久热这里只有精品免费| jizz中国免费| 亚洲人妻av伦理| 亚洲国产精品综合久久久| 最近2019中文免费字幕在线观看| 久久久久久99av无码免费网站| 亚洲美女激情视频| 免费观看国产网址你懂的| 亚洲欧洲日韩在线电影| 成年人免费的视频| 亚洲日韩涩涩成人午夜私人影院| 国产亚洲精品美女| 国产乱辈通伦影片在线播放亚洲| 亚洲精品伊人久久久久 | 亚洲人成网站在线播放2019| 我要看免费的毛片| 亚洲免费在线播放| 国产男女爽爽爽免费视频| 久久久久亚洲精品无码网址| 日韩av无码免费播放| 亚洲国产成人私人影院| 亚洲免费一级视频| 亚洲GV天堂无码男同在线观看| 4虎永免费最新永久免费地址| 亚洲三级在线观看| 日韩免费视频播播| 一级一看免费完整版毛片| 久久精品国产精品亚洲精品 | 亚洲人成电影在线播放| 亚洲性无码AV中文字幕| 国产亚洲福利一区二区免费看| a级片免费在线播放| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲日产韩国一二三四区| 久久精品国产影库免费看| 中文亚洲AV片在线观看不卡| 一本久久免费视频| 亚洲不卡无码av中文字幕| 国产午夜精品久久久久免费视 |