反射使用的總結

一、反射主要涉及到的類
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;
	}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章