对象工具类,提供对象克隆、获取对象属性、类型判断、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的更多相关文章

  1. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  2. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  3. Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie

    Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie >>>>>>>>>>>>& ...

  4. [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具

    原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...

  5. Java字符串转16 进制工具类Hex.java

    Java字符串转16 进制工具类Hex.java 学习了:https://blog.csdn.net/jia635/article/details/56678086 package com.strin ...

  6. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  7. EncryptHelper加密对象-工具类

    using System; using System.IO; using System.Security.Cryptography; using System.Text; using System.W ...

  8. Java 序列化对象工具类

    SerializationUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.Byt ...

  9. java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包

    Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...

随机推荐

  1. Asp.Net MVC 路由 【转】

    原文链接:http://www.asp.net/learn/mvc/ 在这篇教程中,我将为你介绍每个ASP.NET MVC应用程序都具有的一个重要功能,称作ASP.NET路由(ASP.NET Rout ...

  2. Ehcache(2.9.x) - API Developer Guide, Using Explicit Locking

    About Explicit Locking Ehcache contains an implementation which provides for explicit locking, using ...

  3. Ehcache(2.9.x) - API Developer Guide, Cache Decorators

    About Cache Decorators Ehcache uses the Ehcache interface, of which Cache is an implementation. It i ...

  4. Ubuntu系统中Sogou输入法面板问题解决方案

    好消息- Ubuntu Kylin团队与搜狗公司合作开发了“搜狗输入法 for Linux”版本,支持Ubuntu 12.04 和 Ubuntu 14.04操作系统,在Sougou官网就可以下载到,附 ...

  5. Android中用PULL解析XML

    解析XML的方式有DOM,SAX,PULL,那为什么要在Android中使用PULL解析呢?首先来说一下PULL解析的优点,然后再说一下其他两种解析方式的缺点,答案就清晰可见啦. DOM不适合文档较大 ...

  6. 学习IT技术的技巧

    怎样学习一个知识A? (1).为什么需要A?  (*) (2).什么是A?  (*) (3).怎么使用A[最简答的]?  (*) (4).使用A时注意的问题?  (*) (5).A的应用领域. (6) ...

  7. jquery 评论等级(很差,差,一般,好,很好)代码

    可能标题没有说的太明白,这里先让大家看一下效果,以便让客官们了解小弟说的是什么... 看完效果后估计各位客官已经明白小弟说的是什么了吧,下面小弟就带大家看下代码 <style> .maxd ...

  8. 如何把网站及数据库部署到Windows Azure

    http://edi.wang/Post/2014/1/1/deploying-website-with-db-to-azure-custom-domain

  9. UML建模文章总结

    一.为什么要学习UML UML是Unified Modeling Language(统一建模语言)的简称.UML是对软件密集型系统中的制品进行可视化.详述.构造和文档化的语言.制品{Artifact} ...

  10. OpenCV和Matplotlib色彩空间模式不一致的问题

    当用OpenCV读取彩色图像时,OpenCV是以(BGR)的顺序存储图像数据的,而Matplotlib是以(RGB)的顺序显示图像的. 可以用下面的程序来证明这一点 import cv2 import ...