判斷java類型 -- study20180419

內容導覽

  1. 反射方式,成員變量的類型判斷
  2. isInstance用法
  3. 利用泛型識別類型

測試類:

Java代碼  收藏代碼
  1. package com.cxyapi.oo;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import com.cxyapi.generics.TypeToolsGenerics;  
  6.   
  7. /** 類型識別工具測試類 
  8.  * @author cxy @ www.cxyapi.com 
  9.  */  
  10. public class TypeToolsTest2  
  11. {  
  12.     private static int ii=0;  
  13.     private static Date d=new Date();  
  14.       
  15.     public static void main(String[] args) throws Exception  
  16.     {  
  17.         //補充一:獲得成員變量的類型  
  18.         System.out.println(TypeToolsTest2.class.getDeclaredField("ii").getType());   
  19.         System.out.println(TypeToolsTest2.class.getDeclaredField("d").getType());   
  20.         System.out.println("----------------------");  
  21.           
  22.         //補充二:isInstance可判斷出包裝類型,從而得知基本類型  
  23.         System.out.println(Integer.class.isInstance(ii));  
  24.         System.out.println(Date.class.isInstance(d));  
  25.         System.out.println("----------------------");  
  26.           
  27.         //補充三:泛型方式判斷類型  
  28.         System.out.println(TypeToolsGenerics.getType(ii));  
  29.         System.out.println(TypeToolsGenerics.getType(2.2));  
  30.         System.out.println(TypeToolsGenerics.getType(true));  
  31.         System.out.println(TypeToolsGenerics.getType('a'));  
  32.         System.out.println(TypeToolsGenerics.getType(d));  
  33.     }  
  34. }  
  35. 泛型方式類型識別工具:

    Java代碼  收藏代碼
    1. package com.cxyapi.generics;  
    2.   
    3. import java.util.HashMap;  
    4. import java.util.Map;  
    5.   
    6.   
    7. /** 類型識別工具 泛型 
    8.  * @author cxy @ www.cxyapi.com 
    9.  */  
    10. public class TypeToolsGenerics  
    11. {  
    12.     private static final Map<String,String> typeMap=new HashMap<String,String>();  
    13.     static  
    14.     {  
    15.         typeMap.put("java.lang.Byte""byte");  
    16.         typeMap.put("java.lang.Short""short");  
    17.         typeMap.put("java.lang.Integer""int");  
    18.         typeMap.put("java.lang.Long""long");  
    19.         typeMap.put("java.lang.Double""double");  
    20.         typeMap.put("java.lang.Float""float");  
    21.         typeMap.put("java.lang.Character""char");  
    22.         typeMap.put("java.lang.Boolean""boolean");  
    23.     }  
    24.     public final static <T> String getType(T t)  
    25.     {  
    26.         if(t==null){return null;}  
    27.         String typeInfo=t.getClass().getName();  
    28.         return typeMap.containsKey(typeInfo)?typeMap.get(typeInfo):typeInfo;   
    29.     }  

    關於獲取類的字段有兩種方式:getFields()和getDeclaredFields()。我們先來看看這兩者的區別吧:

    getFields():獲得某個類的所有的公共(public)的字段,包括父類中的字段。 
    getDeclaredFields():獲得某個類的所有聲明的字段,即包括public、private和proteced,但是不包括父類的申明字段。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章