PropertyDescriptor

 今天下午在看公司的代碼的時候看到這樣一段,code

PropertyDescriptor類表示JavaBean類經過存儲器導出一個屬性。主要方法:
     1.  getReadMethod(),得到用於讀取屬性值的方法
     2.  getWriteMethod(),得到用於寫入屬性值的方法對象

最初感受這個方法沒有具體的意義 ,既然我已經存在get ,set 方法 ,爲什麼要經過 PropertyDescriptor 反射來設置,通過分析以後,不少狀況 ,咱們不單單要對一個對象 進行設置,可能會對多個不一樣類型的對象進行設置,如此咱們就能夠利用具體的方法名與PropertyDescriptor反射機制進行處理,具體代碼以下  ip

public static void setWithConflictDetection(Object target, String propertyName, String param) {
		PropertyDescriptor pd = null;
		try {
			pd = new PropertyDescriptor(propertyName, target.getClass());
		} catch (IntrospectionException e) {
			e.printStackTrace();
			throw new InvalidParameterException("No such property: " + propertyName);
		}
		Method methodGet = pd.getReadMethod();
		Method methodSet = pd.getWriteMethod();
		try {
			Object oldValue  = methodGet.invoke(target, new Object[]{});
			if(oldValue!=null && param!=null && !oldValue.equals(param)) {
				throw new InvalidParameterException(propertyName, oldValue+"", param);
			}else if(param != null){
				methodSet.invoke(target, param);
			}
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
	}
相關文章
相關標籤/搜索