从Guava 10开始,MapMaker.softKeys不推荐使用,并且不存在相应的方法CacheBuilder.
为什么要做出这种改变?使用它的现有代码需要做什么?
Chr*_*ung 15
我写了这个问题,因为,最初,我确实想知道为什么(因为我使用了现有的代码softKeys).然而,原因在于反思是显而易见的,我决定在这里发布,以防其他人也使用softKeys并且想知道同样的事情.
简而言之,原因是softKeys从一开始就没有任何意义.因此,它最初的包含本身就是一个错误,一个是番石榴开发商通过弃用来纠正的错误.
一般情况下,如果你希望在所有强引用消失之后对象保持一点,你可以使用软引用; 相反,对于弱引用,一旦没有强引用或软引用,对象通常很快就会被收集.这对于您要暂时保留的缓存值很有用,因此使用相应键的查找将"恢复"该值的强引用.
但是,这种行为对键没有任何意义:
softKeys和weakKeys地图使用基于身份的查找,获得感兴趣的条目的唯一方法是拥有对其密钥的强引用.†因此,一旦没有强大的密钥引用,该条目实际上已经死亡(没有复兴的可能性).softKeys和之间唯一的实际区别weakKeys是,在对其键的所有强引用都消失后,条目在地图中保留多长时间.因为这样的条目无论如何都是死的,使用softKeys而不是weakKeys仅仅延迟条目的驱逐,没有充分的理由.因此,大多数情况下,当遇到使用的代码时,softKeys更合适的替代品是weakKeys.
†我没有考虑通过迭代或基于键的查找以外的任何方式获取条目的情况,因为映射主要是基于键的操作.
这是我尝试解释这个问题(克里斯的回应更完整)
http://groups.google.com/group/guava-discuss/browse_thread/thread/764af1e627d6fa0e?pli=1
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |