-
大小: 9KB文件類型: .rar金幣: 2下載: 1 次發(fā)布日期: 2021-06-24
- 語言: Java
- 標簽:
資源簡介
Java提供了一套機制來動態(tài)執(zhí)行方法和構(gòu)造方法,以及數(shù)組操作等,這套機制就叫——反射。反射機制是如今很多流行框架的實現(xiàn)基礎(chǔ),其中包括Spring、Hibernate等。原理性的問題不是本文的重點,接下來讓我們在實例中學(xué)習(xí)這套精彩的機制。
1. 得到某個對象的屬性
public Object getProperty(Object owner, String fieldName) throws Exception {
Class ownerClass = owner.getClass();
Field field = ownerClass.getField(fieldName);
Object property = field.get(owner);
return property;
}
Class ownerClass = owner.getClass():得到該對象的Class。
Field field = ownerClass.getField(fieldName):通過Class得到類聲明的屬性。
Object property = field.get(owner):通過對象得到該屬性的實例,如果這個屬性是非公有的,這里會報IllegalAccessException。
2. 得到某個類的靜態(tài)屬性
public Object getStaticProperty(String className, String fieldName)
throws Exception {
Class ownerClass = Class.forName(className);
Field field = ownerClass.getField(fieldName);
Object property = field.get(ownerClass);
return property;
}
Class ownerClass = Class.forName(className) :首先得到這個類的Class。
Field field = ownerCla

代碼片段和文件信息
package?com.hexiang.reflection;
import?java.lang.reflect.Array;????????
import?java.lang.reflect.Constructor;????????
import?java.lang.reflect.Field;????????
import?java.lang.reflect.Method;????????
???????
???????
/**??????
?*?Java?Reflection?Cookbook??????
?*??????
?*?@author?Michael?Lee??????
?*?@since?2006-8-23??????
?*?@version?0.1a??????
?*/???????
???????
public?class?Reflection?{????????
????/**??????
?????*?得到某個對象的公共屬性??????
?????*??????
?????*?@param?owner?fieldName??????
?????*?@return?該屬性對象??????
?????*?@throws?Exception??????
?????*??????
?????*/???????
????public?object?getProperty(object?owner?String?fieldName)?throws?Exception?{????????
????????Class?extends?object>?ownerClass?=?owner.getClass();????????
???????
????????Field?field?=?ownerClass.getField(fieldName);????????
???????
????????object?property?=?field.get(owner);????????
???????
????????return?property;????????
????}????????
???????
????/**??????
?????*?得到某類的靜態(tài)公共屬性??????
?????*??????
?????*?@param?className???類名??????
?????*?@param?fieldName???屬性名??????
?????*?@return?該屬性對象??????
?????*?@throws?Exception??????
?????*/???????
????public?object?getStaticProperty(String?className?String?fieldName)????????
????????????throws?Exception?{????????
????????Class>?ownerClass?=?Class.forName(className);????????
???????
????????Field?field?=?ownerClass.getField(fieldName);????????
???????
????????object?property?=?field.get(ownerClass);????????
???????
????????return?property;????????
????}????????
???????
???????
????/**??????
?????*?執(zhí)行某對象方法??????
?????*??????
?????*?@param?owner??????
?????*????????????對象??????
?????*?@param?methodName??????
?????*????????????方法名??????
?????*?@param?args??????
?????*????????????參數(shù)??????
?????*?@return?方法返回值??????
?????*?@throws?Exception??????
?????*/???????
????@SuppressWarnings(“unchecked“)
public?object?invokeMethod(object?owner?String?methodName?object[]?args)????????
????????????throws?Exception?{????????
???????
????????Class?extends?object>?ownerClass?=?owner.getClass();????????
???????
????????Class[]?argsClass?=?new?Class[args.length];????????
???????
????????for?(int?i?=?0?j?=?args.length;?i?????????????argsClass[i]?=?args[i].getClass();????????
????????}????????
???????
????????Method?method?=?ownerClass.getMethod(methodName?argsClass);????????
???????
????????return?method.invoke(owner?args);????????
????}????????
???????
???????
??????/**??????
?????*?執(zhí)行某類的靜態(tài)方法??????
?????*??????
?????*?@param?className??????
?????*????????????類名??????
?????*?@param?methodName??????
?????*????????????方法名??????
?????*?@param?args??????
?????*????????????參數(shù)數(shù)組??????
?????*?@return?執(zhí)行方法返回的結(jié)果??????
?????*?@throws?Exception??????
?????*/???????
????@SuppressWarnings(“unchecked“)
public?object?invokeStaticMethod(String?className?String?methodName????????
????????????object[]?args)?throws?Exception?{????????
????????Clas
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????65536??2010-01-07?09:13??Java?反射(Reflection)?經(jīng)典實用例子\Java?反射(Reflection)?經(jīng)典實用例子.doc
?????文件???????5054??2010-01-07?09:12??Java?反射(Reflection)?經(jīng)典實用例子\Reflection.java
?????目錄??????????0??2010-01-07?09:14??Java?反射(Reflection)?經(jīng)典實用例子
-----------?---------??----------?-----??----
????????????????70590????????????????????3
評論
共有 條評論