今天下午在看公司的代碼的時候看到這樣一段,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(); } }