通过反射获得对象的值

news/2024/5/19 3:31:01 标签: java, 反射

  在工作中,难免会通过反射去获得对象某个属性的值,从而进行下一步的操作。如下反射工具实现了这样的功能。

方法一:通过对象反射获取

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


http://www.niftyadmin.cn/n/1316282.html

相关文章

长整型转日期的坑

在工作中&#xff0c;和第三方联调&#xff0c;对方的日期为了节省数据库的存储空间&#xff0c;用varchar类型存储的长整型数字。在转换展示发现竟然是2017年。 后沟通&#xff0c;原来对方存的是Unix时间戳(Unix timestamp)&#xff0c;在转换时需先乘以1000转成毫秒。实例如…

Hibernate实现增删改查

/** * * author fly.zhou */ public interface IBaseDao { //增加对应实体的一条记录 public boolean save(Object o); //更新对应实体的一条记录 public boolean update(Object o); //增加或者更新对应实体的一条记录 public boolean saveOrUpdate(Object o); /…

Java中如何获取枚举的长度

就像enum StepEnum {a,b,c,d}&#xff0c;我想获得StepEnum的长度&#xff0c;可以通过StepEnum.values().length获得&#xff0c;具体使用实例&#xff1a; Set<String> stepSet new HashSet<String>(StepEnum.values().length);

[转载]像树一样活着

人的生活方式有两种&#xff0c; 第一种方式是像草一样活着&#xff0c; 你尽管活着&#xff0c;每年还在成长&#xff0c; 但是你毕竟是一棵草&#xff0c; 你吸收雨露阳光&#xff0c; 但是长不大。 人们可以踩过你&#xff0c; 但是人们不会因为你的痛苦&#xff0c;…

SQL语句order by两个字段同时排序

order by后可加多个字段&#xff0c;用英文逗号隔开&#xff0c;如下所示&#xff1a; --f1用升序&#xff0c; f2降序&#xff0c;sql该这样写 order by f1, f2 desc --也可以这样写&#xff0c;更清楚&#xff1a; order by f1 asc, f2 desc --如果都用降序&#xff0c;必须用…

比较两个List是否相等(相同元素)

最近做的一个项目&#xff0c;需要校验两个List是否相等的问题&#xff0c;我们看看如何比较两个数组相等。数组是一个连续的内存空间&#xff0c;所以一般来说&#xff0c;两个数组相等&#xff0c;就是意味着他们有相同的长度&#xff0c;相同的元素&#xff0c;以及相同的顺…

sql关键字

with nolock 可以读脏数据&#xff0c;读的时候不向资源申请锁&#xff0c;不会被排它锁block readpast 不读有锁的数据&#xff0c;普通的读会被排他锁block 转载于:https://www.cnblogs.com/yfann/p/4935951.html

昨夜,数据库的温柔与妩媚

数据库 之用表组织数据 数据库表相关的几个基本概念 一.数据库的完整性 数据完整性要求数据中的数据具有准确性&#xff0c;准确性是通过数据库表的设计和约束来实现的。 实现数据的完整性&#xff0c;数据库需要做下面的两方作业*检验每行数据是否符合要求 *检验每列数据是否符…