我使用 Guava LoadingCache 来存储 Animal
类型的对象,其中键是动物名称。到目前为止一切顺利。
然后我使用 get()
方法获取缓存的对象并检索 Animal 对象。之后,我添加一行,如下所示:animal.setColor("blue");
之后我意识到 Guava 缓存中以前的颜色也被改变了。我知道修改java中的对象也会改变它的原始状态(类似于按引用传递)。但对于缓存,我认为这会在我的代码中引入一些奇怪的错误。如何获取副本而不担心某些代码是否正在更新刚刚从缓存中检索的对象?
最佳答案
从缓存中获取对象后,您必须复制该对象。没有可靠、高效、通用的方法来做到这一点——不过,在 Animal 类中编写复制构造函数是一种合乎逻辑的方法。
或者您可以停止使用可变对象,这可以普遍防止此类错误。
关于java - 如何从 guava cacheloader 获取缓存的值并更新该值而不更改缓存中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57169376/