利用java反射機制一次性呼叫實體類get和set方法,簡化更多程式碼。
阿新 • • 發佈:2019-01-22
外部呼叫getProperty方法時只需要傳入實體物件即可;例如TestUtil.getProperty(new User());
外部呼叫setProperty方法時只需要傳入實體物件和要set的值即可;例如TestUtil.setProperty(new
User(), "setValue");
這裡呼叫setProperty方法後User類中所有欄位的值都將變為"setValue",所以這裡想要給不同的欄位set不同的值,則換一個引數
以下是核心工具類,
package com.qcp.test; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Field; public class TestUtil { /* 該方法用於傳入某例項物件以及物件方法名,通過反射呼叫該物件的某個get方法 */ public static void getProperty(Object beanObj){ try { Field[] fields = beanObj.getClass().getDeclaredFields();//獲得屬性 Class clazz = beanObj.getClass(); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; // 此處應該判斷beanObj,property不為null PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); Method getMethod = pd.getReadMethod(); if (getMethod != null) { System.out.println(beanObj+"的欄位是:"+field.getName()+",型別是:"+field.getType()+",取到的值是: "+getMethod.invoke(beanObj)); } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IntrospectionException e) { e.printStackTrace(); } } /* 該方法用於傳入某例項物件以及物件方法名、修改值,通過放射呼叫該物件的某個set方法設定修改值 */ public static void setProperty(Object beanObj, Object value){ try { Field[] fields = beanObj.getClass().getDeclaredFields();//獲得屬性 Class clazz = beanObj.getClass(); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; // 此處應該判斷beanObj,property不為null PropertyDescriptor pd = new PropertyDescriptor(field.getName(), beanObj.getClass()); Method setMethod = pd.getWriteMethod(); if (setMethod != null) { System.out.println(beanObj+"的欄位是:"+field.getName()+",引數型別是:"+field.getType()+",set的值是: "+value); //這裡注意實體類中set方法中的引數型別,如果不是String型別則進行相對應的轉換 setMethod.invoke(beanObj, value);//invoke是執行set方法 } } } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IntrospectionException e) { e.printStackTrace(); } } }