gpt4 book ai didi

Java:使用复制构造函数对具有 Runnable 成员的对象进行深度复制

转载 作者:行者123 更新时间:2023-12-02 10:42:53 28 4
gpt4 key购买 nike

我有一个类character,我想在某个事件之前创建它的副本,这样如果用户搞砸了,他可以重试该副本。为了实现这一点,我使用像这样的复制构造函数:

public class character
implements Serializable
{
private String name;
private HashMap<String,Integer> values = new HashMap<>();
private ArrayList<String> traits = new ArrayList<>();
private enums.playerRelations playerRelation;
private static character playerCharacter = new character();
private transient Runnable combatAI;
private transient Runnable tradingAI;
private ArrayList<character> companions = new ArrayList<>();
private ArrayList<item> inventory = new ArrayList<>();
private int maximumInventorySize = 20;
private int maximumSkillSlots = 10;
private transient ArrayList<Pair<skill,Boolean>> skills = new ArrayList<>();
private int portraitResource = R.drawable.ic_bear;
private event eventContext;

public character(character o)
{
name = o.name;
values = new HashMap<>(o.values);
traits = new ArrayList<>(o.traits);
playerRelation = o.playerRelation;
combatAI = o.combatAI;
tradingAI = o.tradingAI;
companions = new ArrayList<>(o.companions);
inventory = new ArrayList<>(o.inventory);
maximumInventorySize = o.maximumInventorySize;
maximumSkillSlots = o.maximumSkillSlots;
skills = new ArrayList<>(o.skills);
portraitResource = o.portraitResource;
eventContext = o.eventContext;
}

// ...
}

但是,我不知道如何深度克隆 Runnable 对象。我怎样才能深度复制那些?使用复制构造函数是否可以实现这一点?

我注意到 Runnablecharacter 的其他成员不同,因为关注的部分存储在函数而不是属性中......

最佳答案

如果你唯一知道的,比如说,combatAI 是它是Runnable,那么你就无法深度复制它 - 可以说它没有深度 -它只是可运行

您可能需要重新考虑这种方法,并在游戏中明确设置检查点(?),以便您可以根据检查点数据创建 combatAI 和其余状态。

另请注意,您的库存副本仅深一层,原始和新角色共享相同的元素。与同伴同样处理

关于Java:使用复制构造函数对具有 Runnable 成员的对象进行深度复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52806111/

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