对象工具类 - ObjectUtils.java
对象工具类,提供对象克隆、获取对象属性、类型判断、Map转换对象、对象转Map、设置对象属性等。
源码如下:(点击下载 -
ObjectUtils.java 、
JsonUtils.java 、
gson-2.2.4.jar 、
commons-lang-2.6.jar)
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;
import org.apache.commons.lang.SerializationUtils;
import org.apache.commons.lang.StringUtils; /**
* 对象工具类
*
*/
public class ObjectUtils { private static final Class<?>[] BASIC_NUMBER_CLASSES = new Class[] {
short.class, int.class, long.class, float.class, double.class }; /**
* 对象克隆
*
* @param t
* a T object.
* @param <T>
* a T object.
* @return a T object.
*/
@SuppressWarnings("unchecked")
public static final <T> T clone(T t) {
if (t == null) {
return null;
}
if (t instanceof Serializable) {
return (T) SerializationUtils.clone((Serializable) t);
}
T result = null;
if (t instanceof Cloneable) {
try {
result = (T) ObjectUtils.clone(t);
} catch (Throwable e) {
}
}
if (result == null) {
String json = JsonUtils.toJson(t);
result = (T) JsonUtils.fromJson(json, t.getClass());
}
return result;
} /**
* 访问对象成员属性值值
*
* @param obj
* @param field
* @return
* @throws YichaException
*/
@SuppressWarnings("rawtypes")
private static final Object getFieldValue(Object obj, String field) throws Exception {
Object result = null;
if (obj instanceof Map) {
return ((Map) obj).get(field);
} if (obj == null) {
return null;
} Method getterMethod = null;
try {
getterMethod = obj.getClass().getMethod("get" + StringUtils.capitalize(field));
} catch (Exception e) {
}
if (getterMethod == null) {
try {
getterMethod = obj.getClass().getMethod("is" + StringUtils.capitalize(field));
} catch (Exception e) {
}
}
if (getterMethod == null) {
Field privateField;
try {
privateField = obj.getClass().getDeclaredField(field);
privateField.setAccessible(true);
result = privateField.get(obj);
} catch (Exception e) {
throw new Exception("field[" + field + "] doesn't exist.");
}
} else {
try {
result = getterMethod.invoke(obj);
} catch (Exception e) {
}
}
return result;
} /**
* 获取对象属性值
*
* @param obj
* 被取值的对象
* @param clazz
* 返回值的类型
* @param path
* 格式:field1.field2.field3
* @param <T>
* a T object.
* @return a T object.
*/
@SuppressWarnings("unchecked")
public static final <T> T getValue(Object obj, Class<T> clazz, String path) {
Object o = getValue(obj, path);
return o == null ? null : (T) o;
} /**
* <p>
* getValue.
* </p>
*
* @param obj
* a {@link java.lang.Object} object.
* @param path
* a {@link java.lang.String} object.
* @return a {@link java.lang.Object} object.
*/
public static final Object getValue(Object obj, String path) {
if (obj == null || StringUtils.isBlank(path)) {
return null;
}
String[] arr = StringUtils.split(path, ".");
Object o = obj;
for (int i = 0, len = arr.length; i < len; i++) {
final String field = StringUtils.strip(arr[i]);
try {
o = getFieldValue(o, field);
} catch (Exception e) {
o = null;
}
}
return o;
} /**
* 判断是否是数字类型
*
* @param obj
* a {@link java.lang.Object} object.
* @return a boolean.
*/
public static final boolean isNumberType(Object obj) {
if (obj == null) {
throw new RuntimeException("object is null.");
}
if (obj instanceof Number) {
return true;
} else {
for (Class<?> clazz : BASIC_NUMBER_CLASSES) {
if (obj.getClass().equals(clazz)) {
return true;
}
}
}
return false;
} /**
* 判断对象是否为零
*
* @param obj
* a {@link java.lang.Object} object.
* @return a boolean.
*/
public static final boolean isZero(Object obj) {
if (!isNumberType(obj)) {
return false;
}
final String foo = String.valueOf(obj);
return StringUtils.equals(foo, "0") || StringUtils.equals(foo, "0.0");
} /**
* Map转换对象
*
* @param map
* a {@link java.util.Map} object.
* @param clazz
* a {@link java.lang.Class} object.
* @param <T>
* a T object.
* @return a T object.
*/
public static final <T> T fromMap(final Map<String, Object> map, Class<T> clazz) {
return JsonUtils.fromJson(JsonUtils.toJson(map), clazz);
} /**
* 对象转Map
*
* @param object
* a {@link java.lang.Object} object.
* @return a {@link java.util.Map} object.
*/
public static final Map<String, Object> toMap(final Object object) {
return JsonUtils.fromJson(JsonUtils.toJson(object));
} /**
* 设置对象属性
*
* @param object
* a {@link java.lang.Object} object.
* @param field
* a {@link java.lang.String} object.
* @param value
* a T object.
* @param paramType
* a {@link java.lang.Class} object.
* @param <T>
* a T object.
*/
@SuppressWarnings("rawtypes")
public static final <T> void setValue(final Object object, final String field, final T value, final Class paramType) {
try {
Method md = object.getClass().getMethod("set" + StringUtils.capitalize(field), paramType);
if (md != null) {
md.invoke(object, value);
}
} catch (Throwable e) {
throw new RuntimeException(e);
}
} /**
* 设置对象属性
*
* @param object
* a {@link java.lang.Object} object.
* @param field
* a {@link java.lang.String} object.
* @param value
* a T object.
* @param <T>
* a T object.
*/
public static final <T> void setValue(final Object object, final String field, final T value) {
try {
for (Method method : object.getClass().getMethods()) {
if (StringUtils.equals(method.getName(), "set" + StringUtils.capitalize(field))) {
method.invoke(object, value);
break;
}
}
} catch (Throwable e) {
throw new RuntimeException(e);
}
} }
对象工具类 - ObjectUtils.java的更多相关文章
- Java日期工具类,Java时间工具类,Java时间格式化
Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie
Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie >>>>>>>>>>>>& ...
- [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具
原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...
- Java字符串转16 进制工具类Hex.java
Java字符串转16 进制工具类Hex.java 学习了:https://blog.csdn.net/jia635/article/details/56678086 package com.strin ...
- UrlUtils工具类,Java URL工具类,Java URL链接工具类
UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...
- EncryptHelper加密对象-工具类
using System; using System.IO; using System.Security.Cryptography; using System.Text; using System.W ...
- Java 序列化对象工具类
SerializationUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.Byt ...
- java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包
Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...
随机推荐
- .NET 认识
- Spring(3.2.3) - Beans(4): p-namespace & c-namespace
p 命名空间 p 命名空间允许你使用 bean 元素的属性而不是 <property/>子元素来描述 Bean 实例的属性值.从 Spring2.0 开始,Spring 支持基于 XML ...
- sublime text使用技巧
常用快捷键 Ctrl + L 选择整行(按住-继续选择下行) Ctrl + KK 从光标处删除至行尾 Ctrl + Shift+K 删除整行 Ctrl + Shift+D 复制光标所在整行,插 ...
- HDOJ2009求数列的和
求数列的和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- SQL创建函数及应用
用户自定义函数在SQL Server中,用户不仅可以使用标准的内置函数,也可以使用自己定义的函数来实现一些特殊的功能.用户自定义函数可以在企业管理器中创建,也可以使用CREATE FUNCTION 语 ...
- 设置 MyEclipse 默认打开文件方式
在web开发时,我们在打开JSP页面时,MyEclipse默认使用 Vistual 的方式打开.这种方式打开JSP页面时,很慢.在实际的开发过程中我们不想使用这种默认的方式打开JSP.设置如 ...
- java计时器
//用于计时,要求xx秒后开始发送短信,短信之间间隔xx秒 public static Date dateOperateBySecond(Date date,int second){ Calendar ...
- dorado listener属性
每一个控件都有一个listener属性,可以用来定位一个服务定位表达式,通过这个表达式, 它最终可以映射为spring里面一个javaBean的一个java方法 例如设置DynaView1.view. ...
- 【转】揭开Socket编程的面纱
对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1. 什么是TCP/IP.UDP?2. Sock ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...