对象工具类,提供对象克隆、获取对象属性、类型判断、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. 知道网站PV流量,如何选何云主机配置带宽大小

  2. Web前端学习笔记1

    Day1. 1.Windows常用快捷键. 快捷键 功能 ctrl+c 复制 ctrl+v 粘贴 ctrl+x 剪切(复制和剪切后都可以粘贴) ctrl+a 全选 ctrl+s 保存 ctrl+tab ...

  3. CSS3 媒体记

    css3 媒体 Media Type 媒体类型 媒体类型是CSS2中一个非常有用的属性.通过媒体类型可以对不同的设备指定不同的样式. W3C共列出十种媒体类型,如表: 值 设备类型 all 所有设备 ...

  4. JavaBean在JSP中显示时间

    创建DateTimeBean的类,将其放置于org.caiduping.bean的包中,实现时间,星期的封装. package org.caiduping.bean; import java.text ...

  5. eclipse 必备

    eclipse编辑器太小  http://jingyan.baidu.com/article/fc07f98974f40c12fee51959.html 新建jsp文件报错     http://ji ...

  6. 了解下SoftReference

    昨天同事看到别人一段关于实现缓存功能的代码,看完之后他有点不明觉厉,哈哈,然后就给周围同事也看了下,可能之前大家都没用过SoftReference,所以并不明白是如何实现的. 于是我就把代码要了过来, ...

  7. C#之base关键字

    1.base关键字用于从派生类中访问基类的成员. 2.调用基类上已被其他方法重写的方法. 3.指定创建派生类的实例是应调用基类的构造函数. 4.访问基类的公有成员和受保护成员,不能访问私有成员 5在静 ...

  8. swift基础知识学习

    用let来声明常量,用var来声明变量   声明变量: var x = 0.0, y = 0.0, z = 0.0 var welcomeMessage: String 常量和变量的命名 你可以用任何 ...

  9. (转)在SQL中取出字符串中数字部分或在SQL中取出字符部分

    近来在开发一个项目时,一包含数字的字符串,需要取出中间的数字部分进行排序.经过baidu搜索.并结合自己项目的需求,编写了一个自定义的SQL函数用供项目中使用. /****** Object: Use ...

  10. struts2 的action 向页面传值

    写一个Action类: public class LoginAction{ public String execute(){ return SUCCESS; } public void setValu ...