博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】...
阅读量:6902 次
发布时间:2019-06-27

本文共 4836 字,大约阅读时间需要 16 分钟。

方法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.Test    public void testName() throws Exception {        FirstCa  ca = new FirstCa();        ca.setFlag(true);        ca.setNum(30);                Map
map = getSortMap(ca); map.forEach((k,v)->{ System.out.println(k+">>>"+v); }); } /** * 使用java反射机制,动态获取对象的属性和参数值,排除值为null的情况,并按字典序排序 * @param object * @return * @throws Exception */ private Map
getSortMap(Object object) throws Exception{ Field[] fields = object.getClass().getDeclaredFields(); Map
map = new HashMap
(); //迭代属性 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
sortMap = new TreeMap
( new Comparator
() { @Override public 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.Test    public void testName() throws Exception {        FirstCa  ca = new FirstCa();        ca.setFlag(true);        ca.setNum(30);                Map
map = getSortMap(ca); map.forEach((k,v)->{ System.out.println(k+">>>"+v); }); } /** * 使用java反射机制,动态获取对象的属性和参数值,排除值为null的情况,并按字典序排序 * @param object * @return * @throws Exception */ private Map
getSortMap(Object object) throws Exception{ Field[] fields = object.getClass().getDeclaredFields(); Map
map = new HashMap
(); //迭代属性 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
sortMap = new TreeMap
( new Comparator
() { @Override public int compare(String arg0, String arg1) { return arg0.compareTo(arg1); } }); sortMap.putAll(map); return sortMap; } }
View Code

 

运行结果:

 

转载地址:http://xfpdl.baihongyu.com/

你可能感兴趣的文章
第三次作业
查看>>
13-标准文档流
查看>>
就业指导第三次作业
查看>>
vscode格式化设置
查看>>
接口测试工具-Jmeter使用笔记(五:正则表达式提取器)
查看>>
VBA-从周课表统计节次
查看>>
(二十三)控制转移指令
查看>>
编译时设置动态链接库路径
查看>>
Java基础代码库:ACM的A+B问题
查看>>
日志分析工具ELK(二)
查看>>
js中eval详解
查看>>
软件设计
查看>>
HDU 5753 Permutation Bo
查看>>
【问题集】VS新建项目——失败——弹出“未将对象引用设置到对象的实例”...
查看>>
blog.yiz96.com
查看>>
centos 创建桌面双击启动程序(更改图标)
查看>>
jq 的grep(); 数组筛选方法
查看>>
[BZOJ] 1059: [ZJOI2007]矩阵游戏
查看>>
HTTP状态码
查看>>
DataGridView key points
查看>>