java - 如何从 guava cacheloader 获取缓存的值并更新该值而不更改缓存中的值?

标签 java caching guava

我使用 Guava LoadingCache 来存储 Animal 类型的对象,其中键是动物名称。到目前为止一切顺利。

然后我使用 get() 方法获取缓存的对象并检索 Animal 对象。之后,我添加一行,如下所示:animal.setColor("blue");

之后我意识到 Guava 缓存中以前的颜色也被改变了。我知道修改java中的对象也会改变它的原始状态(类似于按引用传递)。但对于缓存,我认为这会在我的代码中引入一些奇怪的错误。如何获取副本而不担心某些代码是否正在更新刚刚从缓存中检索的对象?

最佳答案

从缓存中获取对象后,您必须复制该对象。没有可靠、高效、通用的方法来做到这一点——不过,在 Animal 类中编写复制构造函数是一种合乎逻辑的方法。

或者您可以停止使用可变对象,这可以普遍防止此类错误。

关于java - 如何从 guava cacheloader 获取缓存的值并更新该值而不更改缓存中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57169376/

相关文章:

python - SQLAlchemy:如何遍历子查询中的bindparam值?

java - 立即将函数应用于所有元素而不是每个单个元素?

ruby-on-rails - Rails 中 DataMapper 对象的替代序列化

jquery - 生成的 JsonResult 中的属性名称大小写不一致

java - 使用非静态公共(public)最终变量公开实例常量

java - Guava 事件总线 : How to return result from event handler

java - Hibernate不会自动创建表,但是当创建表时,它会将值插入表中

java - 用于kafka实现的python vs java

java - 远程运行自动化测试AutoitX无法移动鼠标或发送按键

java - 在 Java8 Date API 中将持续时间转换为年?