Java Reflection簡單範例如下。
用來測試的POJO User.java
。
User.java
package idv.matt.model;
public class User {
private int userId;
private String userName;
private int age;
public User() {
}
public User(int userId, String userName, int age) {
this.userId = userId;
this.userName = userName;
this.age = age;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
測試Java reflection。
ReflectionTest.java
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import idv.matt.model.User;
public class ReflectionTest {
public static void main(String[] args) {
// 取得Class物件方法1
Class<?> clazz = User.class;
// 取得Class物件方法2
clazz = new User().getClass();
// 取得Class物件方法3
try {
clazz = Class.forName("idv.matt.model.User");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 類別名稱(含package名稱)
System.out.println("class coanonical name : " + clazz.getCanonicalName());
// 類別名稱
System.out.println("class simple name : " + (clazz.getSimpleName()));
// package名稱
System.out.println("class package : " + clazz.getPackage().getName());
// modifier名稱
System.out.println("class modifiers : " + Modifier.toString(clazz.getModifiers()));
// 建構式名稱
Constructor<?>[] constructors = clazz.getConstructors();
for(int i = 0 ; i < constructors.length ; i++) {
System.out.println("constructors" + i + " : " + constructors[i].getName());
}
// 屬性/成員變數名稱
Field[] fields = clazz.getDeclaredFields();
for(int i = 0 ; i < fields.length ; i++) {
System.out.println("field" + i + " : " + fields[i].getName());
}
// 方法名稱
Method[] methods = clazz.getDeclaredMethods();
for(int i = 0 ; i < methods.length ; i++) {
System.out.println("method" + i + " : " + methods[i].getName());
}
}
}
印出結果
class coanonical name : idv.matt.model.User
class simple name : User
class package : idv.matt.model
class modifiers : public
constructors0 : idv.matt.model.User
constructors1 : idv.matt.model.User
field0 : userId
field1 : userName
field2 : age
method0 : getUserId
method1 : setUserId
method2 : getUserName
method3 : setUserName
method4 : getAge
method5 : setAge
沒有留言:
張貼留言