一、反射主要涉及到的類
Class 類的信息
Field 字段信息
Method 方法信息
二、主要涉及的方法
.Class
1.獲取屬性
Field[] getDeclaredFields(); 獲取所有聲明的字段包括父類和私有的
Field[] getFields();獲取所有的可訪問的公共字段
Field getFields(String fieldName); 獲取該名稱可訪問的公共字段
Method getMethod(String methodName,Class paramType); 獲取方法
.Field
1.判斷修飾符
int getModifiers(); 通過返回的數字來判斷修飾符
例如:26-private static final 18 -private final
2、設置私有字段可訪問
void setAccessible(boolean bool); 傳入的參數爲true表示可以訪問私有字段
3、 獲取某個對象該字段的值
Object get(Object obj) ; obj爲傳入的對象
4、獲取該字段的類型
Class getType();
.Method
1.執行某個對象的方法
invoke(obj,param); 執行obj的該方法
以上僅僅是對於項目中用到的進行總,並不全面,僅供參考
下面是一個把符合javaBean規範的對象中的String類型的字段值進行去空的工具方法
public static <T> T trim(T obj, Class<T> cls) {
// 獲取所有聲明的屬性
try {
Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
if (field.getModifiers() == 26 || field.getModifiers() == 18)
continue;
Object value = field.get(obj);// 或obj對象該屬性的值
if (null != value && field.getType() == String.class) {
field.setAccessible(true);// 允許訪問私有變量
String fieldName = field.getName();// 獲取屬性名稱
String methodName = "set"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);// 獲取set方法名稱
Method method = cls.getMethod(methodName, String.class);// 獲取set方法
String str = null;
str = ((String) value).trim();// 去空
method.invoke(obj, str);// 執行set方法
}
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}