方法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;
} }
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<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>() { @Override
public int compare(String arg0, String arg1) { return arg0.compareTo(arg1);
}
});
sortMap.putAll(map);
return sortMap;
} }

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<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>() { @Override
public int compare(String arg0, String arg1) { return arg0.compareTo(arg1);
}
});
sortMap.putAll(map);
return sortMap;
} }

运行结果:

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

  1. 反射学习2-通过反射机制动态获取属性的值模拟Struts的自动赋值

    一.准备知识:   Java反射机制   处理事务的JavaBean   String的操作常用方法 二.模拟步骤   这里我们通过反射机制动态获取属性的值模拟Struts中的自动赋值. 1.首先创建 ...

  2. 通过java反射机制,获取对象的属性和值(包括所有继承的父类)

    java的反射机制提供了两种方法: getDeclaredFields() :该方法能获取到本类的所有属性,包括private,protected和public,但不能获取到继承的父类的属性. get ...

  3. JAVA的反射机制原理

    http://www.cnblogs.com/hongxinlaoking/p/4684652.html 一  反射机制的概念: 指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于 ...

  4. java笔录---反射机制(1)

    引言   为了方便记忆java的反射机制,在这里仔细的总结了一下.主要是怕以后忘记了,这样也方便回忆.因为最近利用空余时间深入的了解spring和Mybatis框架,   像spring中核心模块IO ...

  5. java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值

    1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...

  6. Java反射机制能够获取的信息,与应用

    一.什么是Java反射机制? [1]反射机制是在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法: [2]对于任意一个对象,都能够调用它的任意一个属性和方法: 像这种动态获取类的信息以及动 ...

  7. Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Fi ...

  8. Java的反射机制和动态代理

    介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大的功能,可以原 ...

  9. Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别

    一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:   其中

随机推荐

  1. NSOperation 开发

    目录 1.简介 2.Operation对象 3.自定义Operation对象 4.通过Operation Queues运行Operation对象 5.手动运行Operation对象 一.简介 Coco ...

  2. BOZJ 2045:疯狂的馒头(并查集)

    题目大意:有n个馒头排成一排,初始时颜色为0,进行m次染色,第i次将(i*p+q)mod n到(i*q+p)mod n的馒头全部染成颜色i,求最后所有馒头颜色.n<=10^6 m<=10^ ...

  3. POJ 3630 Phone List | Trie 树

    题目: 给定 n 个长度不超过 10 的数字串,问其中是否存在两个数字串 S, T ,使得 S 是 T 的前缀.多组数据,数据组数不超过 40. 题解: 前缀问题一般都用Trie树解决: 所以跑一个T ...

  4. Codeforces 359D Pair of Numbers | 二分+ST表+gcd

    题面: 给一个序列,求最长的合法区间,合法被定义为这个序列的gcd=区间最小值 输出最长合法区间个数,r-l长度 接下来输出每个合法区间的左端点 题解: 由于区间gcd满足单调性,所以我们可以二分区间 ...

  5. 设置(settings)

    设置(settings) 题目描述 如题所示,这将是一个关于设置的问题. 你需要通过对一个控制台进行设置,来得到不同的效果. 这个控制台由n个控制元件组成,每个元件有m种设置,其中i号元件的第j种设置 ...

  6. Codeforces Round #324 (Div. 2) D

    D. Dima and Lisa time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  7. github的使用简易教程

    一.安装git https://git-for-windows.github.io/ git  ->  git bash 二.配置参数 $ git config --global user.na ...

  8. Linux 安装配置JDK

    一.下载jdk 参考:http://www.codingyun.com/article/40.html 可以先下载到本地,然后ftp到服务器 也可以直接在服务器下载(windows版本的区分32位与6 ...

  9. 理想中的SQL语句条件拼接方式 (二)

    问题以及想要的效果,不重复叙述,如果需要的请先看 理想中的SQL语句条件拼接方式 . 效果 现在有2个类映射数据库的2张表,结构如下: public class User { public int U ...

  10. 转载~Linux 平台下阅读源码的工具

    Linux 平台下阅读源码的工具 前言 看源代码是一个程序员必须经历的事情,也是可以提升能力的一个捷径.个人认为: 要完全掌握一个软件的方法只有阅读源码在Windows下有sourceinsight这 ...