DANCE WITH JAVA

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

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          好友之家

          最新評(pí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í)候,取得參數(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 ;
          ????}


          }

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

          < 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ā)一個(gè)框架,這樣的需求會(huì)比較常見。這個(gè)時(shí)候取到setXX()函數(shù)的參數(shù),就可以對(duì)應(yīng)上邊的問題了。

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

          主站蜘蛛池模板: 萍乡市| 濉溪县| 海城市| 贵德县| 弥渡县| 靖远县| 临漳县| 深泽县| 高尔夫| 子长县| 万盛区| 台北县| 广安市| 五莲县| 阿拉善左旗| 宝丰县| 西乌| 桂阳县| 镇沅| 菏泽市| 罗甸县| 兴城市| 孝感市| 阿拉尔市| 沈丘县| 镇原县| 五峰| 庄河市| 长汀县| 彭泽县| 湘阴县| 伊川县| 炎陵县| 夏津县| 苏州市| 和平区| 涿鹿县| 宜君县| 林州市| 阿城市| 阿克陶县|