首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:具有Runnable成员和复制构造函数的对象的深层副本

Java:具有Runnable成员和复制构造函数的对象的深层副本
EN

Stack Overflow用户
提问于 2018-10-15 03:02:26
回答 1查看 286关注 0票数 0

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

代码语言:javascript
复制
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的其他成员的不同之处在于,关注的部分存储在函数中,而不是属性中……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-15 05:59:06

比方说,如果你只知道combatAIRunnable,那么你就不能对它进行深度复制--可以说它没有深度--它只是Runnable

您可能希望重新考虑这种方法,并在游戏中显式设置检查点(?)这样您就可以根据检查点数据创建combatAI和状态的其余部分。

还要注意的是,您的inventory副本只有一个级别深,原始character和新item共享相同的companions

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52806111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档