內容導覽
- 反射方式,成員變量的類型判斷
- isInstance用法
- 利用泛型識別類型
測試類:
- package com.cxyapi.oo;
- import java.util.Date;
- import com.cxyapi.generics.TypeToolsGenerics;
- /** 類型識別工具測試類
- * @author cxy @ www.cxyapi.com
- */
- public class TypeToolsTest2
- {
- private static int ii=0;
- private static Date d=new Date();
- public static void main(String[] args) throws Exception
- {
- //補充一:獲得成員變量的類型
- System.out.println(TypeToolsTest2.class.getDeclaredField("ii").getType());
- System.out.println(TypeToolsTest2.class.getDeclaredField("d").getType());
- System.out.println("----------------------");
- //補充二:isInstance可判斷出包裝類型,從而得知基本類型
- System.out.println(Integer.class.isInstance(ii));
- System.out.println(Date.class.isInstance(d));
- System.out.println("----------------------");
- //補充三:泛型方式判斷類型
- System.out.println(TypeToolsGenerics.getType(ii));
- System.out.println(TypeToolsGenerics.getType(2.2));
- System.out.println(TypeToolsGenerics.getType(true));
- System.out.println(TypeToolsGenerics.getType('a'));
- System.out.println(TypeToolsGenerics.getType(d));
- }
- }
泛型方式類型識別工具:
- package com.cxyapi.generics;
- import java.util.HashMap;
- import java.util.Map;
- /** 類型識別工具 泛型
- * @author cxy @ www.cxyapi.com
- */
- public class TypeToolsGenerics
- {
- private static final Map<String,String> typeMap=new HashMap<String,String>();
- static
- {
- typeMap.put("java.lang.Byte", "byte");
- typeMap.put("java.lang.Short", "short");
- typeMap.put("java.lang.Integer", "int");
- typeMap.put("java.lang.Long", "long");
- typeMap.put("java.lang.Double", "double");
- typeMap.put("java.lang.Float", "float");
- typeMap.put("java.lang.Character", "char");
- typeMap.put("java.lang.Boolean", "boolean");
- }
- public final static <T> String getType(T t)
- {
- if(t==null){return null;}
- String typeInfo=t.getClass().getName();
- return typeMap.containsKey(typeInfo)?typeMap.get(typeInfo):typeInfo;
- }
- }
關於獲取類的字段有兩種方式:getFields()和getDeclaredFields()。我們先來看看這兩者的區別吧:
getFields():獲得某個類的所有的公共(public)的字段,包括父類中的字段。
getDeclaredFields():獲得某個類的所有聲明的字段,即包括public、private和proteced,但是不包括父類的申明字段。