防御性副本:应该在Javadoc中指定吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了防御性副本:应该在Javadoc中指定吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1029字,纯文字阅读大概需要2分钟。
内容图文
![防御性副本:应该在Javadoc中指定吗?](/upload/InfoBanner/zyjiaocheng/751/4eea9f31ea9f43898aaf203823550993.jpg)
据我所知,getter / setter应该总是复制,以保护数据.
但是,对于我的许多类,让getter返回对所请求属性的引用是安全的,因此以下代码
b = a.getB();
b.setC(someValue);
实际上改变了对象a的状态.如果我能证明我的课程没问题,以这种方式实施getter是一种好习惯吗?是否应该通知用户,例如在Javadoc中?我认为这会破坏实现隐藏范式,所以,我是否应该总是假设a的状态没有改变,并调用setter
b = a.getB();
b.setC(someValue);
a.setB(b);
提前致谢
小号
解决方法:
在上面的例子中有一个很好的论据,因为A维持对B的引用,A应该关注B,而不是将其移出,而是代表你操纵它.否则你可以说你破坏了封装(因为A揭示它有对B的引用),理想情况下对象应该为你做事,而不是导出它们的内容以便你可以操作它们.
说了这么多,上述内容肯定不是一种不常见的做法,而且往往是一种务实的选择.
当您通过get()公开对象时,您有三个选项:
>暴露实际对象
>制作防御性副本
>公开包装原件的对象,但禁止修改.例如您可以将原始对象包装在受限制的界面中.请参阅(例如)Collections.unmodifiableCollection()包装原始集合(并且不复制它),但提供不允许修改的接口.
无论你做什么,你都应该在界面中记录它(因此在Javadoc中).否则你可以随时更改它,并且依赖代码很容易破解.
内容总结
以上是互联网集市为您收集整理的防御性副本:应该在Javadoc中指定吗?全部内容,希望文章能够帮你解决防御性副本:应该在Javadoc中指定吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。