在工作中,难免会通过反射去获得对象某个属性的值,从而进行下一步的操作。如下反射工具实现了这样的功能。
方法一:通过对象反射获取
java">package com.bijian.test;
import java.lang.reflect.Field;
/**
* 反射获取对象属性值工具类
*/
public class ParamsReflectUtil {
public static Object getFieldValue(Object obj, String field) {
Class<?> claz = obj.getClass();
Field f = null;
Object fieldValue = null;
try {
Field[] fields = claz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
if (fields[i].getName().equals(field)) {
f = claz.getDeclaredField(field);
f.setAccessible(true);
fieldValue = f.get(obj);
}
}
} catch (Exception e) {
System.out.println(e.getStackTrace());
}
return fieldValue;
}
}
调用实例:
java">String custNo = (String) ParamsReflectUtil.getFieldValue(request.getData(), "custNo");
如果这里的request.getData()是一个json串,或者进一步,request.getData()是一个通用的json串,无法(或者穷举会比较多)一一将它映射成java对象,我们可以用json工具来获得,如下方法所示。
方法二:通过Json工具获得
java">import java.util.Map;
import java.util.TreeMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* 属性(对象)值反射获取工具类
*/
public class ParamsReflectUtil {
private final static Logger logger = LoggerFactory.getLogger(ParamsReflectUtil.class);
public static Object getFieldValue(String jsonStr, String field) {
JSONObject jsonObject = JSON.parseObject(jsonStr);
Object fieldValue = null;
for (Iterator iter = jsonObject.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
if(name.equals(field)) {
fieldValue = jsonObject.get(name);
}
}
return fieldValue;
}
}
调用实例:
java">String custNo = (String) ParamsReflectUtil.getFieldValue(request.getData(), "custNo");
参考资料:http://blog.csdn.net/starryninglong/article/details/60468440
https://zhidao.baidu.com/question/1754507934238487268.html