gpt4 book ai didi

java - 在 Java 中返回内部集合的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-01 16:45:02 24 4
gpt4 key购买 nike

我很好奇从可变类返回对象集合时什么被认为是更好的做法:

public class Someclass {

public List<String> strings;

public add(String in){ strings.add(in); }
public remove(String in) { strings.remove(in); }

//THIS
public List<String> getStrings(){
return Collections.unmodifiableList(strings);
}

//OR THIS
public List<String> getStrings(){
return new ArrayList(strings);
}
}

我一直认为将内部集合包装在不可修改的容器中是最好的方法,因为我没有看到有理由产生创建副本的开销。然而,我突然想到,内部对列表所做的任何更改都会暴露给客户端,这让我觉得很糟糕。

最佳答案

我认为对此没有简单的“最佳实践”答案。这实际上取决于您愿意花费多少机器资源来防止违反类数据抽象边界。这取决于您实际上想要减轻哪些风险;例如是简单的(非并发)错误、并发错误还是信息泄漏。

选项是:

  • 什么也不做;即按原样返回集合。
  • 返回包装在不可变包装类中的集合。
  • 返回集合的浅拷贝。
  • 返回集合的深拷贝。

除了复制的直接成本之外,其他与性能相关的因素还有内存使用和垃圾生成以及对并发的影响。例如,如果多个线程正在更新集合和/或“获取”它,那么制作集合的副本通常需要锁定它......这可能会使操作成为并发瓶颈。

总之,您需要平衡成本/性能影响与不采取预防措施的潜在或实际风险和成本。

关于java - 在 Java 中返回内部集合的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com