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

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

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

    DANCE WITH JAVA

    開發出高質量的系統

    常用鏈接

    統計

    積分與排名

    好友之家

    最新評論

    利用反射取得泛型信息

    一、傳統通過反射取得函數的參數和返回值

    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 ;
    ????}

    ???
    }



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

    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 ;
    ????}


    }

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

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

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

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

    主站蜘蛛池模板: 免费A级毛片无码无遮挡内射| 亚洲免费视频在线观看| 日韩免费a级毛片无码a∨| 亚洲精品不卡视频| 在线v片免费观看视频| 亚洲伊人精品综合在合线| 波多野结衣免费在线| 亚洲一级毛片中文字幕| 性一交一乱一视频免费看| 亚洲av成人片在线观看| 免费一级国产生活片| 一级做a毛片免费视频| 国产亚洲av片在线观看16女人 | 一级毛片免费观看| 中文字幕亚洲精品| 又黄又爽又成人免费视频| 亚洲成AV人影片在线观看| 国产成人免费福利网站| 免费人人潮人人爽一区二区| 亚洲真人无码永久在线| 日韩免费人妻AV无码专区蜜桃| 亚洲高清视频免费| 在线免费观看污网站| 亚洲免费日韩无码系列| 亚洲综合无码一区二区| 天天天欲色欲色WWW免费| 少妇亚洲免费精品| 亚洲视频免费在线看| 国产极品粉嫩泬免费观看| 成人片黄网站色大片免费观看cn| 亚洲国产精品久久久久婷婷软件| 青青草a免费线观a| selaoban在线视频免费精品| 亚洲AV无码欧洲AV无码网站| 成人女人A级毛片免费软件| 污网站在线观看免费| 亚洲av永久无码精品秋霞电影影院| 香蕉97超级碰碰碰免费公| 青青草国产免费国产是公开| 亚洲欧洲日韩国产综合在线二区| 日韩激情无码免费毛片|