0 0

[Java]对对象深度拷贝的问题5

我现在有如下这几个对象:

class A {
    private Long id;
    private List<B> listB;
    private D d;
    ......
}

class B {
    private Long id;
    private A a;
    private List<C> listC;
    ......
}

class C {
    private Long id;
    private B b;
    ......
}

class D {
    private Long id;
    private A a;
    ......
}

现在我希望将A对象进行深拷贝,将A对象下的所有属性都做一个副本出来,但是ID不要复制。

 

我现在的想法是:

 

1.将每个对象clone出来一个副本,然后将id栏位置空。

 

2.或者对每个对象做一个构造函数,如:

public A (A a){
    this.xxx = a.xxx;
    ......
}

然后将每个对象通过构造函数来构一个新的对象出来,除了ID栏位。

 

 

但是这样做就需要写大篇的代码,请问大家有没有什么比较简单的方法来实现这个功能?

2014年12月02日 15:10

4个答案 按时间排序 按投票排序

0 0

采纳的答案

序列化,反序列化,清空id

2014年12月02日 19:53
0 0

推荐的方法是:
做一个顶层类,ABCD都从顶层类集成,这样你只需要写一个clone()就可以了。
在这个clone里:
1:名字为ID的属性跳过;
2:instanceof判断是否是顶层类的对象,如果是调用clone()进行拷贝;
3:简单类型直接通过反射赋值;

2014年12月03日 16:56
0 0

你需要一个apache的工具类,commons-beanutils.jar  org.apache.commons.beanutils.BeanUtils.copyProperties(B,A);
B.setId(null);

2014年12月03日 16:12
0 0

反射做啊,动态取得你的类的属性,进行复制,碰到list之类的就判断类型之后循环copy。
可以使用apache的BeanUtil之类的东西帮你做。

自己写的话,如果你知道你用到了哪些类型的数据,可以只针对这些数据做反射。所有类型都考虑的话还是挺累的,特别是和格式转换相关的部分(比如一个是string另一个是Date,但是名字相等的情况)

2014年12月02日 16:36

相关推荐

    java 深度拷贝 复制 深度复制.zip

    深度拷贝的优点在于它可以完整地复制一个对象及其引用的对象,避免了修改副本时影响原始对象的问题。然而,这种方法也有一些缺点,如性能开销较大,因为它涉及到大量的反射操作和可能的递归调用。此外,如果类层次...

    java不同对象及集合的多次复制

    - 当需要对多个对象进行复制时,可以使用上述的工具库,如ModelMapper的`map()`方法可以接受多个源对象和目标对象,一次完成多个对象的复制。 7. **指定复制类型** - 在某些场景下,我们可能需要将源对象的属性值...

    java List 深度复制方法

    这篇博客将探讨如何在Java中对List进行深度复制。 首先,我们来理解一下什么是浅复制和深复制。在Java中,当我们使用`clone()`方法或`System.arraycopy()`进行复制时,通常得到的是浅复制的结果。这意味着原始对象...

    java对象复制克隆

    标签中的“复制java对象”、“深度克隆”和“深度复制实例”强调了我们要关注的是Java中如何实现对象的深拷贝,并提供了实际操作的例子。在编写代码时,应该遵循良好的编程实践,包括适当的命名、注释和错误处理,以...

    java反射机制创建对象实现:java 深度拷贝 -超完美

    总的来说,Java反射机制配合序列化可以实现对象的深度拷贝,但这种方法受限于对象必须实现序列化接口。对于不可序列化的对象,可以考虑使用JSON库进行转换。然而,这种方式可能存在性能和兼容性问题,因此在实际应用...

    MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象

    在MyBatis中,我们通常会定义Mapper接口和XML配置文件,映射SQL语句与Java对象之间的关系。如果需要在数据库操作后复制对象,可以在Mapper接口的方法中,或者在Service层中实现对象复制。 总的来说,Java中的对象...

    Java中的深拷贝(深复制)和浅拷贝(浅复制)介绍

    在Java编程语言中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是两种不同的对象复制方式,它们涉及到内存中数据的复制和引用的处理。理解这两种拷贝方式对于开发过程中正确管理和操作对象至关重要。 浅拷贝,又...

    java深度克隆

    浅拷贝只复制对象的基本属性,而深度拷贝不仅复制基本属性,还会复制对象所引用的对象,即递归地复制所有引用对象。本文将详细介绍Java中的深度克隆技术,包括其实现原理及应用场景。 #### 二、深度克隆的重要性 ...

    浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    在Java中,实现深拷贝是一种常见的需求,特别是在对象之间存在多层次关系的情况下。深拷贝可以帮助我们在对象之间保持独立性,并避免了对象之间的耦合关系。在本文中,我们将介绍Java中实现深拷贝的两种方式:clone...

    Java中的深拷贝和浅拷贝介绍

    根据拷贝的深度,Java提供了浅拷贝和深拷贝两种方式,这两种拷贝方式处理对象属性的方式有所不同,对于含有引用类型的属性,它们的表现尤为关键。 一、浅拷贝(Shallow Copy) 浅拷贝是Java中最基础的拷贝形式,它...

    java深度复制源代码

    ### Java深度复制源代码知识点解析 ...综上所述,该Java深度复制工具类通过反射机制实现了JavaBean对象的深度复制,适用于多种场景下的对象复制需求,但在实际应用中需要注意性能和特殊对象结构的处理问题。

    java的深度克隆的例子

    在Java编程语言中,"深度克隆"是一个重要的概念,主要涉及到对象复制。深度克隆,也称为完全克隆,是指创建一个与原...理解并正确使用深度克隆在处理复杂的对象结构时尤其重要,可以避免因对象共享导致的意外修改问题。

    深入JAVA对象深度克隆的详解

    总之,Java对象的深度克隆是解决复杂对象复制问题的有效手段,通过序列化和反序列化确保了新旧对象的完全独立。然而,它也有其局限性和潜在性能影响,所以在实际应用中应根据具体情况选择合适的克隆策略。

    一行代码实现纯数据json对象的深度克隆实现思路

    在JavaScript中,深度克隆指的是创建一个新对象,其内容完全复制自源对象,包括所有嵌套的对象和数组。在处理复杂的数据结构时,深度克隆尤为重要,因为它能确保源对象不受目标对象的修改影响。标题提到的"一行代码...

    java对象拷贝常见面试题及应答汇总

    Java对象拷贝常见面试题及应答汇总 在Java编程中,对象拷贝是一种常见的操作, 涉及到对象的复制和克隆。下面总结了一些常见的面试题和应答,供大家学习和参考。 为什么要使用克隆? 在某些情况下,我们需要对一...

    Java利用序列化实现对象深度clone的方法

    总的来说,Java序列化提供了一种实现对象深度克隆的方法,适用于需要完整复制对象及其关联对象的情况。然而,这也带来了一些潜在问题,如性能影响、安全风险(因为序列化的对象可能被恶意用户反序列化以执行代码)...

    javaEE的对象拷贝工具dozer

    Java EE对象拷贝工具Dozer是一款强大的数据映射库,它简化了在Java对象之间进行深度复制的过程。在软件开发中,特别是在业务层处理数据时,我们经常需要将一个对象的属性值复制到另一个对象中,Dozer提供了一个优雅...

    java 递归拷贝文件显示进度demo

    这个"java 递归拷贝文件显示进度demo"是一个实用的示例,它不仅实现了从一个源目录到目标目录的深度拷贝,而且还提供了进度显示功能,这对于用户来说是一个很好的交互体验。以下是对这个Demo涉及知识点的详细解释: ...

Global site tag (gtag.js) - Google Analytics