我目前正在滚动我自己的小 ORM,并且发现自己面临着创建规范化映射的任务,以防止从数据库中多次加载相同的实体。
我目前的方法是使用HashMap<Object, WeakReference<Object>>
. 键是映射数据库实体的主键(ArrayList<Object>
如果它是复合键),值为WeakReference<Object>
.
我的主要问题是如何清理地图?当不再使用对象时,映射中的弱引用将消失null
,我只会在下一次查找时发现它(或者永远不会,如果我不再查找该对象)。我可以让弱引用ReferenceQueue
在它们被清除时注册,然后每次查找时检查该队列。清除的引用不会给我任何关于哪个对象被清除的提示,所以我想我必须子类WeakReference
化以将键存储在映射中,所以我可以在清除引用后删除它。
这是要走的路,还是有更简单的方法来实现它?