常用的类
apache下beanutils工具类
org.apache.commons.beanutils.BeanUtils
/**
* 复制对象obj,类似于值传递,非引用
*/
private Object cloneObject(Object obj) throws Exception {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(obj);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
return in.readObject();
}
/**
* 比较同一类型class,orig 中非NULL值的属性和dest不同的值到resultBean里面
*
* @param dest 要比较的BEAN
* @param orig 原来BEAN
* @param result 结果BEAN
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
public static void differBeanNotNullPropertyToOtherBean(Object dest, Object orig , Object result) throws IllegalAccessException,
InvocationTargetException {
// Validate existence of the specified beans
if (dest == null) {
throw new IllegalArgumentException("No destination bean specified");
}
if (orig == null) {
throw new IllegalArgumentException("No origin bean specified");
}
if (result == null) {
throw new IllegalArgumentException("No result bean specified");
}
if (!dest.getClass().toString().equals(orig.getClass().toString())) {
throw new IllegalArgumentException("No same bean class");
}
if (orig instanceof Map) {
throw new IllegalArgumentException("No support map");
}
/* if (orig is a standard JavaBean) */
PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(orig);
for (int i = 0; i < origDescriptors.length; i++) {
String name = origDescriptors[i].getName();
if ("class".equals(name)) {
continue; // No point in trying to set an object's class
}
if (PropertyUtils.isReadable(orig, name) && PropertyUtils.isWriteable(dest, name)) {
try {
Object value1 = PropertyUtils.getSimpleProperty(orig, name);
Object value2 = PropertyUtils.getSimpleProperty(dest, name);
if (value2 != null && !value2.equals(value1)) {
if (PropertyUtils.isReadable(result, name) && PropertyUtils.isWriteable(result, name)) {
BeanUtils.copyProperty(result, name, value2);
}
}
} catch (NoSuchMethodException e) {
}
}
}
}
/**
* 比较一个对象,如是这个对象的某一个属性不为空,把他copy到另一个有这个属性的bean中
*
* @param result 要copy到的bean
* @param orig 原来BEAN
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
public static void copyOrigNotNullPropertyToDestBean(Object result, Object orig) throws IllegalAccessException,
InvocationTargetException {
// Validate existence of the specified beans
if (result == null) {
throw new IllegalArgumentException("No destination bean specified");
}
if (orig == null) {
throw new IllegalArgumentException("No origin bean specified");
}
if (orig instanceof Map) {
throw new IllegalArgumentException("No support map");
}
/* if (orig is a standard JavaBean) */
PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(orig);
for (int i = 0; i < origDescriptors.length; i++) {
String name = origDescriptors[i].getName();
if ("class".equals(name)) {
continue; // No point in trying to set an object's class
}
if (PropertyUtils.isReadable(orig, name) && PropertyUtils.isWriteable(result, name)) {
try {
Object value1 = PropertyUtils.getSimpleProperty(orig, name);
if (value1 != null) {
if (PropertyUtils.isReadable(result, name) && PropertyUtils.isWriteable(result, name)) {
BeanUtils.copyProperty(result, name, value1);
}
}
} catch (NoSuchMethodException e) {
}
}
}
}
分享到:
相关推荐
Java中的对象复制与克隆是程序开发中常见的需求,主要用于创建一个对象的副本,而不会影响原始对象的状态。这里主要讨论两种类型的对象拷贝:浅拷贝和深拷贝。 浅拷贝,也称为表面拷贝,是创建一个新的对象,然后将...
在Java编程语言中,对象克隆是一种创建一个与原对象具有相同数据的新对象的过程。对象克隆主要用于复制或备份对象,以便在不干扰原始对象的情况下对其进行修改或操作。本篇文章将详细探讨Java中的对象克隆及其实现...
克隆技术在处理复杂数据结构、避免对象共享以及实现对象复制等方面有着广泛的应用。Java提供了两种主要的克隆方式:深克隆和浅克隆。 1. 浅克隆(Shallow Clone): 浅克隆是通过调用对象的`clone()`方法来实现的,...
本文将深入探讨Java中的对象克隆,包括其原理、实现方式以及注意事项。 一、对象克隆的原理 在Java中,对象克隆可以通过实现`Cloneable`接口并覆盖`Object`类中的`clone()`方法来完成。`Cloneable`接口本身不包含...
标题中的“java对象复制克隆”主要涉及的是深拷贝,这是一种创建一个新对象的方式,新对象不仅复制了原对象的所有属性,还复制了嵌套的对象引用,使得修改复制后的对象不会影响到原始对象。 **浅拷贝**:在浅拷贝中...
"Java 对象克隆详解" Java 对象克隆是 Java 编程中一个重要的概念。由于 Java 中的对象使用引用类型,所以没有直接的方法可以将对象的内容复制到一个新的对象。Java 提供了一个特殊的 clone() 方法,为所有的引用...
Java 中的克隆机制可以让我们方便地制造出一个对象的副本来,但是在克隆过程中需要注意浅克隆和深克隆的区别。 浅克隆(Shallow Clone)是指对对象的域进行简单的 copy,对象的reference变量也会被copy,但是对应的...
在MyBatis中,我们通常会定义Mapper接口和XML配置文件,映射SQL语句与Java对象之间的关系。如果需要在数据库操作后复制对象,可以在Mapper接口的方法中,或者在Service层中实现对象复制。 总的来说,Java中的对象...
总的来说,理解Java对象的深克隆和浅克隆是优化代码和解决特定问题的关键。根据具体需求选择合适的克隆方式,可以提高代码的可维护性和灵活性。在设计类和系统时,应考虑对象复制的需求,并决定是否实现`Cloneable`...
深度克隆,也称为完全克隆,是指创建一个与原对象相同的新对象,不仅复制原对象的所有属性,还复制了原对象中引用的对象。这通常用于创建一个独立于原对象的新实例,即使原对象发生改变,新对象也不会受到影响。下面...
在Java编程语言中,克隆是创建一个对象副本的过程,这个副本与原对象有相同的属性值,但作为不同的对象存在。克隆分为两种主要类型:浅克隆(Shallow Clone)和深克隆(Deep Clone)。这篇博客文章将探讨这两种克隆...
在Java编程语言中,克隆和序列化是两个...总结来说,Java中的克隆和序列化是两个强大的工具,它们在数据持久化、对象复制以及网络通信等方面有着广泛的应用。理解和熟练掌握这两个概念,对于Java开发者来说至关重要。
在Java编程语言中,克隆(Clone)机制是一种创建对象副本的方法,它允许开发者创建一个已有对象的新实例,这个新实例与原对象具有相同的属性值,但却是两个独立的对象,彼此的操作不会互相影响。克隆机制在某些情况...
在Java开发过程中,对象拷贝是一项常见操作。根据拷贝程度的不同,对象拷贝通常分为浅拷贝和深度拷贝两种类型。浅拷贝只复制对象的基本属性,而深度拷贝不仅复制基本属性,还会复制对象所引用的对象,即递归地复制...
在Java编程中,对象之间的复制是一项常见的操作,特别是在数据传输、模型转换或者持久化存储等场景下。这里的“java不同对象之间及集合的复制”主要关注如何高效且便捷地完成对象及其集合的复制工作,避免繁琐的手动...
在 Java 编程中,对象克隆是一种非常重要的技术,它允许开发者创建一个对象的副本,具有相同的属性和行为。对象克隆可以分为浅克隆和深克隆,浅克隆仅复制对象的引用,而深克隆则复制对象的所有属性。 对象克隆的...
深度克隆,也称为完全克隆,是一种创建新对象的技术,这个新对象不仅包含原始对象的所有属性值,还包含了嵌套对象的完整副本。这意味着如果一个对象中包含了其他对象的引用,深度克隆会创建这些引用对象的独立副本,...
Java对象的克隆是编程中一个重要的概念,主要用于创建一个对象的新副本,这个副本与原对象具有相同的属性值。在Java中,有两种主要的克隆方式:浅克隆(Shallow Clone)和深克隆(Deep Clone)。接下来,我们将详细...
深入了解Java对象的克隆 Java 对象的克隆是 Java 编程语言中一个重要的概念,它允许开发者创建对象的副本,避免了对象之间的相互影响。在本文中,我们将深入了解 Java 对象的克隆,了解何时需要使用克隆,如何实现...