如何制作对象的防御性副本? [英] How do I make defensive copy of an object?

查看:302
本文介绍了如何制作对象的防御性副本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何制作包含不可变对象中可变字段的Mutable对象的防御性副本?

How do I make defensive copies of a Mutable Object which contains a mutable field in an Immutable Object?

class ImmutableObject {

  private final MutableObject immutable_field;

  ImmutableObject(MutableObject y) {
    this.immutable_field = y;
  }
}

class MutableObject {

  public int mutable_field;
}




  • MutableObject没有允许的构造函数我设置了字段。

  • MutableObject的当前状态应该在Immutable Object中捕获并且永远不会改变。

  • 推荐答案

    您需要做的是

      MutableObject return_immutable_field() {
        return immutable_field;
      }
    

    更改为:

      MutableObject return_immutable_field() {
        MutableObject tmp = new MutableObject();
        tmp.mutable_field = immutable_field.mutable_field;
        return tmp;
      }
    

    有关解释,请参阅 http://www.javapractices.com/topic/TopicAction.do?Id=15

    这篇关于如何制作对象的防御性副本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆