ObjectTools反射实例

package com.shitou.deposit.chinapnr.utils;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* ObjectTools
* @author zhouky
* @since 2018年12月6日
*/
public class ObjectTools {
private static transient final Log log = LogFactory.getLog("ObjectTools");
/**
* 根据属性名获取属性值
* @param fieldName
* @param o
* @return
*/
private Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[] {});
Object value = method.invoke(o, new Object[] {});
return value;
} catch (Exception e) {
log.error(e.getMessage(), e);
return null;
}
}
/**
* 获取属性名数组
* @param o
* @return
*/
private String[] getFiledName(Object o) {
Field[] fields = o.getClass().getDeclaredFields();
String[] fieldNames = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
System.out.println(fields[i].getType());
fieldNames[i] = fields[i].getName();
}
return fieldNames;
}
/**
* 获取属性名数组
* @param o
* @return
*/
public List<Map<String, Object>> getFiledsInfo(Object o) {
Field[] fields = o.getClass().getDeclaredFields();
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> infoMap = null;
for (int i = 0; i < fields.length; i++) {
if ("serialVersionUID".equals(fields[i].getName()) || "log".equals(fields[i].getName())) {
continue;
}
infoMap = new HashMap<String, Object>();
infoMap.put("type", fields[i].getType().toString());
infoMap.put("name", fields[i].getName());
infoMap.put("value", getFieldValueByName(fields[i].getName(), o));
list.add(infoMap);
}
fields = o.getClass().getSuperclass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
if ("serialVersionUID".equals(fields[i].getName()) || "log".equals(fields[i].getName()) ||
"url".equals(fields[i].getName()) || "cfcaMerCustId".equals(fields[i].getName())) {
continue;
}
infoMap = new HashMap<String, Object>();
infoMap.put("type", fields[i].getType().toString());
infoMap.put("name", fields[i].getName());
infoMap.put("value", getFieldValueByName(fields[i].getName(), o));
list.add(infoMap);
}
fields = o.getClass().getSuperclass().getSuperclass()
.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
if ("serialVersionUID".equals(fields[i].getName()) || "log".equals(fields[i].getName()) || "url".equals(fields[i].getName())
|| "cfcaMerCustId".equals(fields[i].getName())) {
continue;
}
infoMap = new HashMap<String, Object>();
infoMap.put("type", fields[i].getType().toString());
infoMap.put("name", fields[i].getName());
infoMap.put("value", getFieldValueByName(fields[i].getName(), o));
list.add(infoMap);
}
return list;
} /**
* 获取对象的所有属性值,返回一个对象数组
* @param o
* @return
*/
public Object[] getFiledValues(Object o) {
String[] fieldNames = this.getFiledName(o);
Object[] value = new Object[fieldNames.length];
for (int i = 0; i < fieldNames.length; i++) {
value[i] = this.getFieldValueByName(fieldNames[i], o);
}
return value;
}
}

ObjectTools反射实例的更多相关文章

  1. 类的反射实例(servlet的抽取)

    类的反射实例 具体以后我们写的时候不用写BaseServlet,因为各种框架都已经给我们写好了 所以,user对应的servlet的界面长这样:

  2. C#反射实例应用--------获取程序集信息和通过类名创建类实例

    AppDomain.CurrentDomain.GetAssemblies();获取程序集,但是获取的只是已经加载的dll,引用的获取不到. System.Reflection.Assembly.Ge ...

  3. PHP API反射实例

    *反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用.其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言.php反射api由若干类组成,可帮助我们用来 ...

  4. java反射 实例

    首先介绍几个概念: 1.Java反射的概念 反射含义:可以获取正在运行的Java对象. 2.Java反射的功能 1)可以判断运行时对象所属的类 2)可以判断运行时对象所具有的成员变量和方法 3)通过反 ...

  5. c# 类的反射实例 (GetType().Invoke().GetMethod().CreateInstance())

    原文:http://www.cnblogs.com/chenwei19/archive/2009/02/04/1384034.html Class1和Form 窗体在同一个命名空间 using Sys ...

  6. C#反射实例(一) 利用反射使用类库

    在网上查找了不少的资料,可以说大同小异,概念性的东西网上一搜一堆,今天把反射的东西整理了一下,供大家使用,我保证我这里是最全面的东西,当然也是基础的东西,在学好了这一切的基础上,大家可以学习反射的具体 ...

  7. Java 反射实例

    实体类:Userpackage com.reflect.model; public class User{ private User(int id, String username, String p ...

  8. C# 反射实例

    1.接口 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

  9. go反射实例

    需求分析: 如在rocketmq的网络通信中,所有通信数据包以如下形式传输: (注:rocketmq的java结构体,这里使用了go形式表示) type RemotingCommand struct ...

随机推荐

  1. Codeforces Round #105 D. Bag of mice 概率dp

    http://codeforces.com/contest/148/problem/D 题目意思是龙和公主轮流从袋子里抽老鼠.袋子里有白老师 W 仅仅.黑老师 D 仅仅.公主先抽,第一个抽出白老鼠的胜 ...

  2. Java学习笔记2、环境变量配置与初学者常见错误

    2.1 环境变量的配置   2.1.1 path环境变量配置的作用 程序的执行需要使用外部指令javac,但是javac指令仅仅能在JDK安装目录下的bin目录下运行,因此程序只能写入bin目录程序开 ...

  3. Struts 第一个Hello页面

    在工程目录的src下新建 struts.xml   <?xml version="1.0" encoding="UTF-8" ?> <!DOC ...

  4. 利用Redis撤销JSON Web Token产生的令牌

    利用Redis撤销JSON Web Token产生的令牌 作者:chszs.版权全部.未经允许,不得转载.博主主页:http://blog.csdn.net/chszs 早先的博文讨论了在Angula ...

  5. 自己Cookie写的自动登录功能 包含BASE64 和MD5的使用

    sql表 username  password字段 User类 有 id username password等字段 Service有一函数 @Override public User findUser ...

  6. [转]SIGPIPE信号

    我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是莫名退出,没有core文件. 最后问题确定为, 对一个对端已经关闭的socket调 ...

  7. jquery mobile 的loading提示“正在加载...”在不同版本中的不同实现方式

    在jquery mobile开发中,在页面的切换.或者ajax获取数据时由于网速慢等其他原因,会有一个加载的时间,如果能在这段时间给一个“正在加载...”的提示,用户体验会更好.下面来简单的介绍一下在 ...

  8. centos 7 生成文件名乱码的问题如何解决?

    在应用脚本生成文件时,发现生成的文件名称出现乱码(似麻将一样).刚开始找来找去,以为是复制粘贴的原因,复制时复制了特殊字符导致的,结果修改源文件后发现生成的文件名还是乱码.后来在执行脚本时,提示&qu ...

  9. git团队协作流程

    创建项目,在github上增加一个repository,在要提交的工程目录下打开git bash,执行git init 命令,用于初始化,可使用git status 查看git状态,然后使用git a ...

  10. sklearn 中模型保存的两种方法

    一. sklearn中提供了高效的模型持久化模块joblib,将模型保存至硬盘. from sklearn.externals import joblib #lr是一个LogisticRegressi ...