運行時給java對象動態的屬性賦值


運行時給java對象動態的屬性賦值 

如何給java對象動態的屬性賦值(也就是在代碼執行的時候才決定給哪個屬性賦值)

       

1.自定義一個工具類ReflectHelper,代碼如下所示:  

package  com.bxsurvey.process.util;
import  java.lang.reflect.Method;
import  java.util.Hashtable;
import  java.util.regex.Pattern;
/**
* @desc 通過反射來動態調用get 和 set 方法
*/
public  class  ReflectHelper {
private  Class cls;
/**
* 傳過來的對象
*/
private  Object obj;
private  Hashtable<String, Method> getMethods =  null ;
private  Hashtable<String, Method> setMethods =  null ;
public  ReflectHelper(Object o) {
obj = o;
initMethods();
}
public  void  initMethods() {
getMethods =  new  Hashtable<String, Method>();
setMethods =  new  Hashtable<String, Method>();
cls = obj.getClass();
Method[] methods = cls.getMethods();
// 定義正則表達式,從方法中過濾出getter / setter 函數.
String gs =  "get(\\w+)" ;
Pattern getM = Pattern.compile(gs);
String ss =  "set(\\w+)" ;
Pattern setM = Pattern.compile(ss);
// 把方法中的"set" 或者 "get" 去掉,$1匹配第一個
String rapl =  "$1" ;
String param;
for  ( int  i =  0 ; i < methods.length; ++i) {
Method m = methods[i];
String methodName = m.getName();
if  (Pattern.matches(gs, methodName)) {
param = getM.matcher(methodName).replaceAll(rapl).toLowerCase();
getMethods.put(param, m);
else  if  (Pattern.matches(ss, methodName)) {
param = setM.matcher(methodName).replaceAll(rapl).toLowerCase();
setMethods.put(param, m);
else  {
// org.jeecgframework.core.util.LogUtil.info(methodName + " 不是getter,setter方法!");
}
}
}
public  boolean  setMethodValue(String property,Object object) {
Method m = setMethods.get(property.toLowerCase());
if  (m !=  null ) {
try  {
// 調用目標類的setter函數
m.invoke(obj, object);
return  true ;
catch  (Exception ex) {
ex.printStackTrace();
return  false ;
}
}
return  false ;
}
}  

2.用法,假如現在要Person類中的name屬性賦值

ReflectHelper reflectHelper =  new  ReflectHelper( new  Person()); //創建工具類對象
reflectHelper.setMethodValue( "name" "值" ); // 動態調用 set方法給文件對象內容賦值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM