我在游戏中有一个用于统计数据的基础对象。每次我为战斗地图上的40个总和单位开始战斗时,我都会复制该对象。
然后我修改每个单元的stats对象。我当然不想通过引用传递。 base stats对象填充了大约50个基元。所以我创建了一个对象的构造函数类,并且繁琐地完成了每个原语的复制。这似乎是我发现谷歌搜索最安全的方式。
示例代码
class Stats{
int x;
int y;
int b;
public Stats(Stats stats)
{
this.x = stats.x;
this.y = stats.y;
this.b = stats.b;
}
}
Stats currentUnit = new Stats (currentUnitBaseStats);
-questions -
这非常令人沮丧和凌乱。是否值得花时间研究实现内置克隆功能?
如果我的stats类最终包含其他对象,那么其中包含的所有对象是否也需要实现克隆功能?
有更简单的方法吗?
方面的问题:在Android上持有40个单独的100~原语类仍然相当低的RAM消耗权吗? 谢谢,我爱你们:)
答案 0 :(得分:2)
如果你有这么多原语(50)为什么不使用HashMap?:
public static void main (String[] args)
{
HashMap<String, Integer> stats = new HashMap<String,Integer>();
stats.put("x",3);
stats.put("y",4);
stats.put("z",5);
stats.put("b",9);
HashMap<String, Integer> statsCopy = new HashMap<String,Integer>();
statsCopy.putAll(stats);//this will copy all the values from the base object
}
答案 1 :(得分:1)
这是实施Stats类的最佳方式。它可能看起来令人沮丧和混乱,但从功能上讲,这个课程很简单。
如果统计值永远不会有机会,您可以考虑将Stats设为静态类。然后,您永远不需要复制它。例如:
static class Stats
{
private int x = 10;
private int y = 12;
private int b = 13;
...
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public int getB()
{
return b;
}
}
要获取这些值,您将调用Stats.getX(),并且永远不必实例化Stats类。缺点是Stats对引用它的所有对象都是相同的。
如果您需要独立的stat值,则应使用当前的实现。
如果所有stat对象的起始值相同,则可以创建一个额外的构造函数来设置这些值。
class Stats{
int x;
int y;
int b;
public Stats()
{
this.x = 10;
this.y = 11;
this.b = 12;
}
}
要回答你的第二个问题,40个具有100个基元的对象最多需要32,000个字节,或者大约32个字节,假设它们都是双倍的。在现代硬件上,这应该不是问题,但是如果您可以重复使用数据,我建议您这样做。