獲取班級成員我有班級名稱(作爲String
),我想獲取所有成員及其類型。我知道我需要使用反射,但是如何?從班級名稱
舉例來說,如果我有
class MyClass {
Integer a;
String b;
}
我怎麼得到的a
和b
的類型和名稱?
獲取班級成員我有班級名稱(作爲String
),我想獲取所有成員及其類型。我知道我需要使用反射,但是如何?從班級名稱
舉例來說,如果我有
class MyClass {
Integer a;
String b;
}
我怎麼得到的a
和b
的類型和名稱?
如果類已經被JVM加載,你可以使用類稱爲類的靜態方法。 forName(String className);它會返回給你一個反射對象的句柄。
你會怎麼做:
//get class reflections object method 1
Class aClassHandle = Class.forName("MyClass");
//get class reflections object method 2(preferred)
Class aClassHandle = MyClass.class;
//get a class reflections object method 3: from an instance of the class
MyClass aClassInstance = new MyClass(...);
Class aClassHandle = aClassInstance.getClass();
//get public class variables from classHandle
Field[] fields = aClassHandle.getFields();
//get all variables of a class whether they are public or not. (may throw security exception)
Field[] fields = aClassHandle.getDeclaredFields();
//get public class methods from classHandle
Method[] methods = aClassHandle.getMethods();
//get all methods of a class whether they are public or not. (may throw security exception)
Method[] methods = aClassHandle.getDeclaredMethods();
//get public class constructors from classHandle
Constructor[] constructors = aClassHandle.getConstructors();
//get all constructors of a class whether they are public or not. (may throw security exception)
Constructor[] constructors = aClassHandle.getDeclaredConstructors();
爲了得到一個名爲b。從MyClass的變量,一個可以做。
Class classHandle = Class.forName("MyClass");
Field b = classHandle.getDeclaredField("b");
如果b是整數類型,爲了得到它的值,我會做。
int bValue = (Integer)b.get(classInstance);//if its an instance variable`
或
int bValue = (Integer)b.get(null);//if its a static variable
假設我不知道字段類型,我應該怎麼做?你在做int bValue =(Integer)b.get(classInstance);但我有類成員列表(我使用Field [] fields = classHandle.getDeclaredFields();)我想知道各自的類型。我不能使用你的代碼,因爲你正在做鑄造,我不知道字段類型 –
,如果你有一些Field f,並且你想獲得類型的類句柄,你可以使用f.getType();您也可以將其更改爲Object bValue = b.get(...); –
也,如果該字段不公開,您將不得不調用field.setAccessible(true);在獲得之前,或者你會得到一個安全例外 –
看一看的[甲骨文反射引導](http://docs.oracle.com/javase/6/docs/technotes/guides/reflection/index.html )包含教程,指南,示例和API文檔的鏈接。 – zoom