对象工具类,提供对象克隆、获取对象属性、类型判断、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. 关于servlet与jsp&java类传值问题

    为了实现单击左侧导航栏,动态改变右侧(一个jsp文件)的内容,需要改变变量var的值,进而实现改变default部分内容的目的(自己想的方法,因为实在是layman.应该有简便快捷的方法,可我不知道. ...

  2. 有些方法为什么会声明称static静态的

    有些方法在调用的时候,没有必要都要先实例化一下,只需要:[类名. 静态方法 ]就行了. 哪些方法的调用没有必要实例化呢?网上找了个例子: 举个例子:Car类,1.静态方法Run(),Car.Run() ...

  3. Koajs原理

    Koajs让习惯阻塞式代码写法的同学感到很舒服,再也不用盖楼式的callback了,而且也不需要学习Promise的then,catch这些新东西. 但实际上,Koajs这样的写法有点像是语言的语法糖 ...

  4. css笔记——杂记

    ####文本框内阴影#### input[type=text], textarea, input[type=email], input[type=url]{ box-shadow: inset 2px ...

  5. dorado listener属性

    每一个控件都有一个listener属性,可以用来定位一个服务定位表达式,通过这个表达式, 它最终可以映射为spring里面一个javaBean的一个java方法 例如设置DynaView1.view. ...

  6. spring定时器 @Scheduled

    需要注意的几点: 1.spring的@Scheduled注解  需要写在实现上. 2. 定时器的任务方法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误.需要设定一个proxyta ...

  7. java synchronized关键字

    引用其他人的一段话 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchro ...

  8. 小技巧:SystemTray中进行操作提示

    SystemTray中进行操作提示在wp中应用比较广泛,截图如下. 实现方法也十分简单 1.xaml代码中写入: shell:SystemTray.IsVisible="True" ...

  9. Hibernate的单向OneToMany、单向ManyToOne

    单向OneToMany 一个用户有多张照片,User----->Images是一对多关系,在数据库中Images维护一个外键useid 1.在映射关系的主控方Image这边,我们什么都不做.(为 ...

  10. ecshop中无限处理分类

    数据库表记录结构 <?php $sql = "SELECT c.cat_id, c.cat_name, c.measure_unit, c.parent_id, c.is_show, ...