java - Java中防御复制的低效率

标签 java performance defensive-programming defensive-copy

<分区>

我是一名长期的 C/C++ 程序员,正在学习 Java。我已经阅读了通过使用返回对私有(private)字段的引用的访问器方法来破坏封装的问题。标准的 Java 解决方案似乎是防御性复制——调用复制构造函数或 clone() 来创建字段的副本并返回对该副本的引用。我不明白为什么似乎没有人担心制作防御性副本的效率低下。在 C++ 中,访问器只会返回一个指向 const 的指针,从而在不进行复制的情况下保护私有(private)成员。为什么 Java 没有对 const 的引用?

最佳答案

Why doesn't Java have a reference to const?

问题只能由语言设计者正确回答,但我认为问题在于他们无法弄清楚如何使其成为语言设计的一部分。我的记忆(来 self 曾经遇到的一些“Java 设计原理”文档)是 Gosling 等人最初想要支持 const ...

事实上,尽管 C 和 C++ 都支持 const 作为表达可变性约束的一种方式,但它们也都存在允许某些代码“破坏”约束的漏洞。 (请参阅关于 const-correctness 的维基百科文章。)可能是因为难以为没有(或不需要)此类漏洞的 Java 设计,导致 Gosling 等人放弃了该想法。

不利的一面是,Java 中对防御性复制的需求并不像您想象的那么大,而且这样做的成本也没有您想象的那么大。当防御性副本的成本很高时,Java 中还有其他选择……例如创建“不可修改”的包装器对象,或仅支持“读取”操作的接口(interface)。

关于java - Java中防御复制的低效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19192762/

相关文章:

java - 如何在我的 ubuntu 中找到 java JPS?

java - 如何使用 HTMLcleaner 获取元素的值

C++:在 vector 中插入什么 - 指针或引用, vector 何时复制其元素?

security - 防御性编程

c++ - 防御性编程是否违反了 DRY 原则?

java - 诊断 android 3.0 中不需要的 onPause

java - 在 HashMap Key 中输入 3 个属性

javascript - 提高背景视差滚动的性能

css - css 中有太多背景图片会影响性能吗?

c# - 我应该如何防御性地编程?