gpt4 book ai didi

java - 更改指向实例的所有对象

转载 作者:行者123 更新时间:2023-12-02 04:03:53 25 4
gpt4 key购买 nike

假设我有一个接口(interface) Player 和两个从它派生的类:LoadedPlayerUnloadedPlayerLoadedPlayer > 在计算机需要时使用,并将其保存在 RAM 内存中,UnloadedPlayer 在计算机不需要时使用,并将其保存到文件中,实际上实例仅包含对文件的引用。如何在加载和卸载之间切换而不创建丑陋的盒子类并将它们封装起来?

最佳答案

您可以通过保留使用引用的所有位置的列表来做到这一点。通过这种方式,您可以根据需要更改所有引用,但这有点容易出错。

另一种方法是使用持久 map 并通过键引用玩家,例如一个独特的名字。由于 map 是持久化的,您不需要知道它何时写入磁盘,但您需要确保在更改播放器数据时更新 map 。

此类 map 的示例有 Chronicle Map、MapDB、Hazelcast、Terracotta、Grid Gain、Coherence,不胜枚举。

如果您有自己的Reference类型,您可以简化代理。你可以做类似的事情

Reference<Player> ref = ..
Player player = ref.get();

如果您需要知道播放器何时被使用,您可以这样做。

ref.with(player -> doSomething(player));

这样您就可以在使用时按住并锁定播放器,并在完成后释放它。

关于java - 更改指向实例的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34577447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com