更改指向实例

时间:2016-01-03 14:13:15

标签: java file

假设我有一个界面Player和两个派生自它的类:LoadedPlayerUnloadedPlayerLoadedPlayer用于计算机需要它并保存在ram memory,UnloadedPlayer用于计算机不需要它并将其保存到文件中,实际上该实例仅包含对该文件的引用。 如何在不创建丑陋的盒子类并将其封装的情况下在加载和卸载之间切换?

1 个答案:

答案 0 :(得分:2)

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

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

这样的地图的例子是Chronicle Map,MapDB,Hazelcast,Terracotta,Grid Gain,Coherence,太多了。

如果您拥有自己的Reference类型,则可以简化代理。你可以做像

这样的事情
Reference<Player> ref = ..
Player player = ref.get();

如果你需要知道玩家何时被使用,你可以这样做。

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

通过这种方式,您可以在使用时按住播放器并在完成后释放它。