有 Java 编程相关的问题?

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

java关于新对象

我在游戏中有一个用于统计数据的基本对象。每次我为战斗地图上的40个求和单位开始战斗时,我都会复制这个对象

然后我修改每个单元的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);

-问题-

这是非常令人沮丧和混乱的。值得我花时间研究实现内置克隆功能吗

如果我的stats类最终包含其他对象,那么它包含的所有对象是否也需要实现克隆功能

有没有更简单的方法

附带问题:在安卓系统上,拥有40个单独的100个基本类的内存消耗仍然很低,对吧? 谢谢,我爱你们:)


共 (1) 个答案

  1. # 1 楼答案

    这是实现Stats类的最佳方法。它可能看起来令人沮丧和混乱,但从功能上讲,这个类非常简单

    如果STAT值没有机会,可以考虑使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类。缺点是,所有引用它的对象的统计数据都是相同的

    如果需要独立的stat值,应该使用当前的实现

    如果所有stat对象的起始值都相同,则可以创建一个额外的构造函数来设置这些值

    class Stats{
        int x;
        int y;
        int b;
    
        public Stats()
        {
            this.x = 10;
            this.y = 11;
            this.b = 12;
        }
    }
    

    要回答第二个问题,假设40个对象和100个原语都是双倍的,那么它们最多需要32000字节(约32KB)。在现代硬件上,这不应该是一个问题,但是如果您可以重用数据,我鼓励您这样做