gpt4 book ai didi

java - 为什么 softKeys() 在 Guava 10 中被弃用?

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:36 25 4
gpt4 key购买 nike

从 Guava 10 开始,MapMaker.softKeys已弃用,CacheBuilder 中不存在相应的方法.

为什么要进行此更改?我需要如何处理使用它的现有代码?

最佳答案

我写这个问题是因为,最初,我确实想知道为什么(因为我有使用 softKeys 的现有代码)。然而,经过反射(reflection),原因很明显,我决定将其张贴在这里,以防其他人也使用 softKeys 并且想知道同样的事情。

简而言之,原因是 softKeys 一开始就没有任何意义。因此,最初包含它本身就是一个错误,Guava 开发人员正在通过弃用来纠正这个错误。

一般来说,如果你想让对象在所有强引用都消失后仍然存在一段时间,你可以使用软引用;相反,对于弱引用,一旦没有强引用或软引用,对象通常很快就会被收集。这对于您想暂时保留的缓存很有用,这样使用相应键的查找将“恢复”该值的强引用。

但是,此行为对键没有任何意义:

  • 由于 softKeysweakKeys 映射使用基于身份的查找,因此获得感兴趣条目的唯一方法是对其键具有强引用。< sup>† 因此,一旦没有留下强键引用,条目实际上就死了(没有复活的可能性)。
  • softKeysweakKeys 之间的唯一实际区别是在对其键的所有强引用都消失后,条目在映射中保留的时间。由于此类条目无论如何都是死的,因此使用 softKeys 而不是 weakKeys 只会延迟条目的驱逐,没有充分的理由。

因此,大多数时候遇到使用 softKeys 的代码时,更合适的替代方法是 weakKeys

† 我不考虑通过迭代获取条目的情况,或者除了基于键的查找之外的任何其他方式,因为映射主要是关于基于键的操作。

关于java - 为什么 softKeys() 在 Guava 10 中被弃用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7618129/

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