方法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. .NET Framework中的过时类型

    文章:.NET Framework 中的过时类型 url地址:https://docs.microsoft.com/zh-cn/dotnet/framework/whats-new/obsolete- ...

  2. string 与 byte[] 互转时的注意事项

    1.string 转 byte[] //为UTF8编码 byte[] midbytes=isoString.getBytes("UTF8"); //为ISO-8859-1编码,其中 ...

  3. Codeforces 433 Div.2(A、B、C、D)

    A. Fraction 暴力遍历1-1000,取组成的真分数比值最大且分子分母gcd为1时更新答案 代码: #include <stdio.h> #include <algorith ...

  4. 2017 多校1 I Curse Myself

    2017 多校2 I Curse Myself(第k小生成树) 题目: 给一张带权无向连通图,该图的任意一条边最多只会经过一个简单环,定义\(V(k)为第k小生成树的权值和\),求出\(\sum_{k ...

  5. 转:用VMProtect和ASProtect 的SDK加密应用程序

    最近想用VMProtect和ASProtect 的SDK加密一个程序,结果搞了半天没搞成,网上没看到在VC中如何使用VMProtect的SDK加密,于是琢磨了一下,总算成功了,最后有一点点心得,与大家 ...

  6. Java不需要加载整张图片而获取图片的大小

    转载地址 http://blog.jdk5.com/zh/java-get-image-size-without-loading-the-whole-data/ 利用Java类,获取图片的类型,宽度和 ...

  7. 关于js的addEventListener 和一些常用事件

    element.addEventListener(<event-name>, <callback>, <use-capture>);document.addEven ...

  8. 花匠(NOIP2013)(神奇纯模拟)

    原题传送门 这是道很奇怪的题目,真不知道为什么要放到T2. 也许是T1太水了 首先先看题, 题目要求一个数列中下标为偶数的点比临近的下表为奇数的点更大或更小 其实就是说在原数组中找到一个最长的波动数列 ...

  9. Xcode5 上64位编译 出错No architectures to compile for

    http://blog.csdn.net/chocolateloveme/article/details/16900999 详细错误信息如下: No architectures to compile ...

  10. Linux Context , Interrupts 和 Context Switching 说明【转】

    转自:http://blog.csdn.net/tianlesoftware/article/details/6461207 一. 进程Context 定义 当一个进程在执行时, CPU的所有寄存器中 ...