gpt4 book ai didi

java - Guava 不可变集合有用还是只是额外的开销?

转载 作者:行者123 更新时间:2023-12-01 21:46:03 25 4
gpt4 key购买 nike

我正在查看一些源代码,它似乎几乎到处都在使用 Guava 的不可变集合。现在,该应用程序不是多线程的,因此并发性不再是问题。

我正在查看 guava 的 github wiki,它说 - 当您不希望修改集合或希望集合保持不变时,最好将其防御性地复制到不可变集合中。

现在我的问题是 - 即使它们没有外部暴露并且在应用程序内部使用,制作集合的防御性副本是否是一个好主意,或者在这种情况下这是不必要的额外开销?我只是好奇。

最佳答案

如果你的类传递了一个它存储的集合,那么无论如何获取一个防御性副本都是一个好主意。这样,它就与外部世界解耦了,您可以确定地推理您的类,并且 future 对外部世界的更改不会破坏您的类的假设(例如,如果集合在将其传递给构造函数后在外部进行了修改)。请参阅《Effective Java》第 39 条。

由于您的默认立场应该是防御性复制,因此只要有意义,就使该副本保持不变非常有用。这会立即告诉读者有关该集合的更多信息:其内容永远不会改变。这也意味着您也不需要在 getter 方法中进行防御性复制:只需直接返回不可变集合即可。这也为您类(class)的用户提供了更多信息。

此外,如果您传入类的集合恰好是兼容的 Immutable 类型,Guava 很聪明,并且实际上不会创建副本。因此,通过广泛拥抱不变性,您最终将获得防御性复制的所有好处,而几乎不需要任何成本。

提示:请参阅 ImmutableCollection javadoc 有关应在何处以及为何声明事物的建议,例如ImmutableListList

关于java - Guava 不可变集合有用还是只是额外的开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35999379/

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