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

前端之家收集整理的这篇文章主要介绍了java – 克隆()真的用过吗?在getter / setter中防御性复制怎么样?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
人们几乎都会使用防御性的吸气者/安装者吗?对我来说,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

原文链接:https://www.f2er.com/java/120920.html

猜你在找的Java相关文章