有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

假设我有一个接口Player和两个派生自它的类:LoadedPlayerUnloadedPlayerLoadedPlayer在计算机需要它时使用,并保存在ram内存中,UnloadedPlayer在计算机不需要它时使用,并保存到一个文件中,实际上实例只包含对该文件的引用。 如何在加载和卸载之间切换,而不创建丑陋的box类并将其嵌入


共 (1) 个答案

  1. # 1 楼答案

    你可以通过保存一个引用所使用的所有地方的列表来实现这一点。这样可以根据需要更改所有引用,但这有点容易出错

    另一种方法是使用持久化的地图,并通过一个键(例如唯一的名称)引用玩家。当地图被持久化时,你不需要知道它什么时候被写入磁盘,但是你需要确保地图在你为播放器更改数据时被更新

    这类地图的例子有编年史地图、MapDB、Hazelcast、Terracotta、栅格增益、一致性,不胜枚举

    如果有自己的Reference类型,可以简化代理。你可以这样做

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

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

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

    这样你就可以坚持住。使用时锁定播放器,完成后释放