利用反射獲取實體類的相關資訊
阿新 • • 發佈:2018-12-19
假設我們現在有一個實體類sys_config 1.獲取該實體的資訊有3種方法: 第一種(通過物件呼叫 getClass() 方法來獲取,通常應用在:比如你傳過來一個 Object 型別的物件,而我不知道你具體是什麼類,用這種方法):
// 利用new實體來獲取,適合測試練習使用 sys_config sc= new sys_config(); Class<? extends sys_config> class1 = sc.getClass(); System.out.println(class1); // class com.hokai.MybatisPlusDemo.entity.sys_config (class 具體的包名+類名) System.out.println(class1.getName()); // com.hokai.MybatisPlusDemo.entity.sys_config (具體的包名+類名) // 獲取類的所有屬性 Field[] fields = class1.getDeclaredFields(); for (Field field : fields) { System.out.println("--"+ field.getType().getName()+" "+field.getName()); } Method[] methods = class1.getDeclaredMethods(); for (Method method : methods) { System.out.println("方法: "+method.getName()); }
第二種:
// 每個類都有一個靜態的成員變數class
System.out.println(sys_config.class); //class com.hokai.MybatisPlusDemo.entity.sys_config
第三種:(通過 Class 物件的 forName() 靜態方法來獲取,也是最常用的方法,但必須要捕捉ClassNotFoundException 異常)
try { Class<?> className = Class.forName("com.hokai.MybatisPlusDemo.entity.sys_config"); //指定類名 System.out.println(className); // class com.hokai.MybatisPlusDemo.entity.sys_config System.out.println(className.getName()); // com.hokai.MybatisPlusDemo.entity.sys_config int lastIndexOf = className.getName().lastIndexOf("."); System.out.println(className.getName().substring(lastIndexOf+1));// sys_config } catch (ClassNotFoundException e) { //e.printStackTrace(); System.out.println("類沒有找到,請核實!"); }
2.通過 Class 類獲取成員變數、成員方法、介面、超類、構造方法等
查閱 API 可以看到 Class 有很多方法:
getName():獲得類的完整名字。 getFields():獲得類的public型別的屬性。 getDeclaredFields():獲得類的所有屬性。包括private 宣告的和繼承類 getMethods():獲得類的public型別的方法。 getDeclaredMethods():獲得類的所有方法。包括private 宣告的和繼承類 getMethod(String name, Class[] parameterTypes):獲得類的特定方法,name引數指定方法的名字,parameterTypes 引數指定方法的引數型別。 getConstructors():獲得類的public型別的構造方法。 getConstructor(Class[] parameterTypes):獲得類的特定構造方法,parameterTypes 引數指定構造方法的引數型別。 newInstance():通過類的不帶引數的構造方法建立這個類的一個物件。