加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 克隆()真的用过吗?在getter / setter中防御性复制怎么

发布时间:2020-12-14 05:53:27 所属栏目:Java 来源:网络整理
导读:人们几乎都会使用防御性的吸气者/安装者吗?对我来说,99%的时间打算将您在另一个对象中设置的对象作为同一对象引用的副本,并且您打算对它所做的更改也在它所设置的对象中进行.如果你setDate(Date dt)并稍后修改dt,谁在乎呢?除非我想要一些基本的不可变数据
人们几乎都会使用防御性的吸气者/安装者吗?对我来说,99%的时间打算将您在另一个对象中设置的对象作为同一对象引用的副本,并且您打算对它所做的更改也在它所设置的对象中进行.如果你setDate(Date dt)并稍后修改dt,谁在乎呢?除非我想要一些基本的不可变数据bean,它只有原语,也许像Date一样简单,我从不使用它.

就克隆而言,副本的深度或浅度存在问题,因此知道克隆对象时会出现什么样的“危险”.我想我只使用过一次或两次clone(),那就是复制对象的当前状态,因为另一个线程(即访问Session中同一个对象的另一个HTTP请求)可能正在修改它.

编辑 – 我在下面做的评论更多的是问题:

但话说回来,你DID改变日期,所以这是你自己的错,因此整个讨论术语“防守”.如果在中小型开发人员组中,您自己控制的是所有应用程序代码,那么仅仅记录您的类是否足以作为制作对象副本的替代方法?或者这不是必需的,因为你应该总是假设在调用setter / getter时没有被复制的东西?

解决方法

来自Josh Bloch的Effective Java:

You must program defensively with the assumption that clients of your class will do their best to destroy its invariants. This may actually be true if someone tries to break the security of your system,but more likely your class will have to cope with unexpected behavior resulting from honest mistakes on the part of the programmer using your API. Either way,it is worth taking the time to write classes that are robust in the face of ill-behaved clients.

Item 24: Make defensive copies when needed

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读