- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
从 Guava 10 开始,MapMaker.softKeys
已弃用,CacheBuilder
中不存在相应的方法.
为什么要进行此更改?我需要如何处理使用它的现有代码?
最佳答案
我写这个问题是因为,最初,我确实想知道为什么(因为我有使用 softKeys
的现有代码)。然而,经过反射(reflection),原因很明显,我决定将其张贴在这里,以防其他人也使用 softKeys
并且想知道同样的事情。
简而言之,原因是 softKeys
一开始就没有任何意义。因此,最初包含它本身就是一个错误,Guava 开发人员正在通过弃用来纠正这个错误。
一般来说,如果你想让对象在所有强引用都消失后仍然存在一段时间,你可以使用软引用;相反,对于弱引用,一旦没有强引用或软引用,对象通常很快就会被收集。这对于您想暂时保留的缓存值很有用,这样使用相应键的查找将“恢复”该值的强引用。
但是,此行为对键没有任何意义:
softKeys
和 weakKeys
映射使用基于身份的查找,因此获得感兴趣条目的唯一方法是对其键具有强引用。< sup>† 因此,一旦没有留下强键引用,条目实际上就死了(没有复活的可能性)。softKeys
和 weakKeys
之间的唯一实际区别是在对其键的所有强引用都消失后,条目在映射中保留的时间。由于此类条目无论如何都是死的,因此使用 softKeys
而不是 weakKeys
只会延迟条目的驱逐,没有充分的理由。因此,大多数时候遇到使用 softKeys
的代码时,更合适的替代方法是 weakKeys
。
† 我不考虑通过迭代获取条目的情况,或者除了基于键的查找之外的任何其他方式,因为映射主要是关于基于键的操作。
关于java - 为什么 softKeys() 在 Guava 10 中被弃用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7618129/
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Why is softKeys() deprecated in Guava 10? 原因MapMaker.softK
我想检测是否使用 SoftKey 将某些内容放入 EditText。 我已经覆盖了 dispatchKeyEvent 但它不起作用...... @Override public boolean
从 Guava 10 开始,MapMaker.softKeys已弃用,CacheBuilder 中不存在相应的方法. 为什么要进行此更改?我需要如何处理使用它的现有代码? 最佳答案 我写这个问题是因为
创建了“AccessibilityService”并且能够根据输入的文本显示提示。问题是我想在主机应用程序主页按下时停止 Activity 服务。我试过添加 这样我就可以解决带有“主页”物理按钮的手
我是一名优秀的程序员,十分优秀!