方法1:通过get()方法获取属性值

package com.sxd.test.controller;public  class FirstCa{private Integer num;private String name;private Boolean flag;public Integer getNum() {return num;}public void setNum(Integer num) {this.num = num;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Boolean getFlag() {return flag;}public void setFlag(Boolean flag) {this.flag = flag;}}

View Code

package com.sxd.test.controller;import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;public class Test {@org.junit.Testpublic void testName() throws Exception {FirstCa  ca = new FirstCa();ca.setFlag(true);ca.setNum(30);Map<String,String> map = getSortMap(ca);map.forEach((k,v)->{System.out.println(k+">>>"+v);});}/*** 使用java反射机制,动态获取对象的属性和参数值,排除值为null的情况,并按字典序排序* @param object* @return* @throws Exception*/private Map<String, String> getSortMap(Object object) throws Exception{Field[] fields = object.getClass().getDeclaredFields();Map<String, String> map = new HashMap<String, String>();//迭代属性 for(Field field : fields){String name = field.getName();String methodName = "get" + name.replaceFirst(name.substring(0, 1), name.substring(0, 1).toUpperCase());// 调用getter方法获取属性值
//                 Method getter = object.getClass().getMethod(methodName);
//                 String value =  getter.invoke(object)+"";//通过get方法直接获取属性值field.setAccessible(true);Object value = field.get(object);if (value != null){map.put(name, value.toString());}System.out.println("字段名:"+name);System.out.println("字段值:"+field.get(object));System.out.println("字段java语言修饰符:"+field.getModifiers());System.out.println("字段类型:"+field.getType());System.out.println("");}Map<String, String> sortMap = new TreeMap<String, String>(new Comparator<String>() {@Overridepublic int compare(String arg0, String arg1) {return arg0.compareTo(arg1);}});sortMap.putAll(map);return sortMap;}}

View Code

Field.setAccessible(true);得作用就是让我们在用反射时访问私有变量

运行结果:

方法2: 通过属性自己的getter方法获取属性值

package com.sxd.test.controller;import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;public class Test {@org.junit.Testpublic void testName() throws Exception {FirstCa  ca = new FirstCa();ca.setFlag(true);ca.setNum(30);Map<String,String> map = getSortMap(ca);map.forEach((k,v)->{System.out.println(k+">>>"+v);});}/*** 使用java反射机制,动态获取对象的属性和参数值,排除值为null的情况,并按字典序排序* @param object* @return* @throws Exception*/private Map<String, String> getSortMap(Object object) throws Exception{Field[] fields = object.getClass().getDeclaredFields();Map<String, String> map = new HashMap<String, String>();//迭代属性 for(Field field : fields){String name = field.getName();String methodName = "get" + name.replaceFirst(name.substring(0, 1), name.substring(0, 1).toUpperCase());// 调用getter方法获取属性值Method getter = object.getClass().getMethod(methodName);String value =  getter.invoke(object)+"";//通过get方法直接获取属性值
//                 field.setAccessible(true);
//                 Object value = field.get(object);if (value != null && !"null".equals(value)){map.put(name, value);}System.out.println("字段名:"+name);System.out.println("字段值:"+value);System.out.println("字段java语言修饰符:"+field.getModifiers());System.out.println("字段类型:"+field.getType());System.out.println("");}Map<String, String> sortMap = new TreeMap<String, String>(new Comparator<String>() {@Overridepublic int compare(String arg0, String arg1) {return arg0.compareTo(arg1);}});sortMap.putAll(map);return sortMap;}}

View Code

运行结果:

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】...相关推荐

  1. java 反射 设置属性_Java通过反射机制动态设置对象属性值的方法

    /** * MethodName: getReflection * Description:解析respXML 在通过反射设置对象属性值 * User: liqijing * Date:2015-7- ...

  2. java微信支付签名生成_微信APP支付(Java后台生成签名具体步骤)

    public class PayCommonUtil { //定义签名,微信根据参数字段的ASCII码值进行排序 加密签名,故使用SortMap进行参数排序 public static String ...

  3. 微信支付-签名生成工具-Java

    1.微信接口文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3 2.具体代码 package com.lyn.v5.poli ...

  4. Java的反射机制 —— 类的镜子

    Java的反射机制 -- 类的镜子 文章目录 Java的反射机制 -- 类的镜子 一.反射机制的原理 1.1.什么是反射? 1.2.反射机制的实现 1.3.获取类的Class对象的途径 1.4.运行时 ...

  5. java反射之获取class对象,Java之反射机制(获取Class对象的三种方式)

    Java之反射机制(获取Class对象的三种方式) 开发工具与关键技术:MyEclipse 10,java 作者:刘东标 撰写时间:2019-06-14 如何得到各个字节码对应的实例对象? 每个类被加 ...

  6. java class 生成对象_Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class java.lang.reflect.Constructor java.lang.reflect.Field java.lang.refl ...

  7. android中通过java的反射机制获取U盘名称

    在android项目中实现Windos一样的U盘效果,需监听两个U盘的插入和拔出状态,并屏蔽本地存储,使用U盘来下载和上传文件: 在编辑代码中碰到一个问题:无法获取插入U盘的名称,于是通过java的反 ...

  8. java xml 反射_Java 读取XML文件以及Java 的反射机制实现

    Java 读取XML文件以及Java 的反射机制实现 代码部分 import java.io.File; import javax.xml.parsers.DocumentBuilder; impor ...

  9. 搞懂Java的反射机制

    搞懂Java的反射机制 1.什么是反射? java的反射机制是指可以在运行状态下获取类和对象的所有属性和方法. 2.反射的作用? 1.在运行时获取一个类/对象的成员变量和方法 2.在运行时创建一个类的 ...

最新文章

  1. IOS中scrollsToTop问题小结
  2. C语言的头文件和库文件(函数库)
  3. 文献记录(part74)--Subspace clustering via seeking neighbors with minimum reconstruction error
  4. linux怎么取消raid磁盘阵列,Linux下彻底关闭某个RAID磁盘阵列
  5. centos7安装csvn
  6. matplotlib 中文_Python 关于matplotlib无法显示中文字体的解决方法
  7. 数据库返回刚插入记录的ID
  8. .net vue漂亮登录界面_一文弄懂前端框架Vue 的核心——数据绑定,为升职涨薪加分
  9. iPhone/iPad各种文件路径详解 帮助了解自己的iphone和ipad
  10. Fortran: namelist
  11. plsqldev的配置
  12. Advanced.MP3.WMA.Recorder.v5.8.WinAll-CAT
  13. 银河麒麟桌面操作系统sp1 2203双硬盘ghost备份及手动分区还原
  14. 桌面计算机主流硬盘接口,M.2和U.2谁更好?主流硬盘接口大扫盲
  15. Scintilla 开源库使用-如何设置页边背景色和前景色
  16. 冲击、碰撞试验测试技术——冲击传感器的校准
  17. 测速工具使用心得体会
  18. 【CSDN软件工程师能力认证学习精选】SQL语句查询
  19. 运动控制卡应用开发教程之C++
  20. 绝对布局absoluteLayout

热门文章

  1. 让 PM 全面理解深度学习
  2. 研究表明:无人驾驶技术减少拥堵加快进程
  3. CNN已老,GNN来了:重磅论文讲述深度学习的因果推理
  4. 商汤等提出:统一多目标跟踪框架
  5. SAP WM 采购订单收货后LT06上架界面弹出的QM Sample小窗口如何不让其出现?
  6. pytorch 加载模型报错:‘function‘ object has no attribute ‘copy‘
  7. 中文分词jieba的简单使用
  8. 汇总pandas中的dataframe的索引操作
  9. 计算机科学家证明,为什么更大的神经网络可以做得更好
  10. 光遗传学离诺奖又双叒进一步!10天后谜底将揭晓 (盘点光遗传学近年来获奖记录)...