【问题标题】:Java return copy to hide future changesJava 返回副本以隐藏未来的更改
【发布时间】:2010-09-06 23:41:30
【问题描述】:

在 Java 中,假设您有一个包装 ArrayList(或任何集合)对象的类。

您将如何返回其中一个对象,以使调用者不会看到将来对 ArrayList 中的对象所做的任何更改?

即您想返回对象的深层副本,但您不知道它是否可克隆。

【问题讨论】:

    标签: java deep-copy cloning


    【解决方案1】:

    将其转化为规范:
    - 对象需要实现一个接口才能被允许进入集合 类似ArrayList<ICloneable>()

    那么你可以放心,你总是做一个深拷贝——接口应该有一个保证返回深拷贝的方法。

    我认为这是你能做的最好的。

    【讨论】:

      【解决方案2】:

      一种选择是使用序列化。这是一篇解释它的博客文章:

      http://weblogs.java.net/blog/emcmanus/archive/2007/04/cloning_java_ob.html

      【讨论】:

        【解决方案3】:

        我想这是一个显而易见的答案:

        使存储在集合中的类成为可克隆的必要条件。您可以在插入时或检索时检查,无论什么更有意义,然后抛出异常。

        或者,如果该项目不可克隆,则只需故障返回到按引用返回选项。

        【讨论】:

          猜你喜欢
          • 2019-02-03
          • 2019-02-09
          • 2011-09-24
          • 1970-01-01
          • 2014-09-23
          • 2022-01-20
          • 1970-01-01
          • 1970-01-01
          • 2022-06-30
          相关资源
          最近更新 更多