国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
利用反射取得泛型信息

一、傳統(tǒng)通過(guò)反射取得函數(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)境
例如你要寫(xiě)一個(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>
如果你要著手開(kāi)發(fā)一個(gè)框架,這樣的需求會(huì)比較常見(jiàn)。這個(gè)時(shí)候取到setXX()函數(shù)的參數(shù),就可以對(duì)應(yīng)上邊的問(wèn)題了。
 
(#)
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
跳過(guò)編譯器,獲取泛型參數(shù)的實(shí)際類型
全國(guó)2010年1月自考Java語(yǔ)言程序設(shè)計(jì)試題(續(xù))
張龍 Annotation學(xué)習(xí)筆記
Java反射機(jī)制詳解
asm字節(jié)碼操作 步驟的動(dòng)態(tài)修改增加
Java 反射
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服