1. 程式人生 > >利用反射獲取實體類的相關資訊

利用反射獲取實體類的相關資訊

假設我們現在有一個實體類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():通過類的不帶引數的構造方法建立這個類的一個物件。