Java 深度复制对象

Java 深度复制对象,java,object,copy,Java,Object,Copy,有没有可能在开箱即用的情况下对对象进行深度复制?i、 e.手动编写克隆功能以外的任何其他方式 克隆不一定执行深度复制。实际上,Object.clone()的默认实现创建了一个浅拷贝 如果对象的闭包由实现Serializable或Externalizable的对象组成,则可以使用ObjectOutputStream和ObjectInputStream创建深度副本。。。但是它很贵 库是另一个选项,但我对代码的初步理解是,它依赖于图中每个对象的类提供无参数构造函数。然后,它将修补生成的对象,以获得原始

有没有可能在开箱即用的情况下对
对象进行深度复制?i、 e.手动编写
克隆
功能以外的任何其他方式

  • 克隆不一定执行深度复制。实际上,
    Object.clone()
    的默认实现创建了一个浅拷贝

  • 如果对象的闭包由实现
    Serializable
    Externalizable
    的对象组成,则可以使用
    ObjectOutputStream
    ObjectInputStream
    创建深度副本。。。但是它很贵

  • 库是另一个选项,但我对代码的初步理解是,它依赖于图中每个对象的类提供无参数构造函数。然后,它将修补生成的对象,以获得原始对象状态的副本。这个过程可能会有不希望的副作用,这取决于no-args构造函数的实际功能


  • 简而言之,我认为没有通用的解决方案。

    我建议使用java.lang.reflect

    类公开所有字段,并允许读取公共字段和调用公共方法


    只有没有访问器的私有字段才能被克隆。

    我简要地查看了
    克隆库代码。它执行序列化的操作,即获取对象内部的图形,而不是写入文件,而是写入内存位置=作为对象的克隆。因此,尽管它比序列化更快,但它肯定也在做同样的事情

    看一看谢谢。这个lib正在发挥作用。但我不是在寻找自由。我在寻找逻辑。i、 这个库是怎么做到的?没错。但我检查了密码。它几乎没有评论。虽然可以研究代码,但有人可能会更快更好地描述逻辑。顺便说一句,我会继续研究代码作为最后的选择。谢谢。这里有一个建议-序列化/反序列化。不完全正确。对象反序列化使用JVM后门创建新对象,JVM后门创建对象而不运行其构造函数。(默认的
    Object.clone()
    方法做类似的事情…)不可能有真正通用的解决方案,因为它需要克隆打开的文件和网络连接,运行线程,包括等待等等诸如此类的东西。@hyde-是的,但即使包括理论上不可能复制的类型,仍然有一组类型可以复制,但不能复制。