首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免.clone()?

如何避免.clone()?
EN

Stack Overflow用户
提问于 2015-10-09 20:22:19
回答 2查看 196关注 0票数 2

考虑一下这门课

代码语言:javascript
复制
class MyClass {
  private MyData[] data;

  public MyData[] getData() {
    return data == null ? null : (MyData[]) data.clone();
  }

这就是制造问题

方法返回内部数组。 直接公开内部数组允许用户修改一些可能非常关键的代码。返回数组的副本更安全。

考虑到clone不好并且应该避免,我能做些什么来使代码更好呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-09 20:25:26

返回数组副本的最简单方法可能是调用Arrays.copyOf

代码语言:javascript
复制
public MyData[] getData() {
    return data == null ? null : Arrays.copyOf(data, data.length);
}
票数 6
EN

Stack Overflow用户

发布于 2015-10-09 20:25:41

我也同意克隆是不好的,但在数组上并非如此。克隆在数组上表现良好。您的代码是干净的,.Keep是这样的。

不久,我将在数组克隆上附加乔希·布洛赫单词的引用。

乔希·布洛赫谈克隆

道格·利亚更进一步。他告诉我,除了复制数组之外,他不再使用克隆。--您应该使用克隆复制数组,因为这通常是最快的方法--。但道格的类型不再实现克隆。他已经放弃了。我认为这不是不合理的。

如果您完全避免克隆,那么下一步的最佳选择是

代码语言:javascript
复制
System.arraycopy(array1,0, array2, 0, array1.length);

因为

Arrays.copyOf在内部创建另一个数组对象,并在System.arraycopy使用传递的数组时返回它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33046529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档