有什么理由不应该使一个类包含一个对另一个类的引用作为字段(并且还是值得这样做)吗?

时间:2018-09-18 06:16:22

标签: java class memory reference

我正在用Java开发一个简单的游戏,其中的单位是类,它们的名称,健康状况等存储在字段中。从文件中读取这些单位,然后将其存储在哈希图中以形成一个主库,该主库在生成新单位时用作参考。

我正在尝试确定如何在游戏中存储实际单位(不是用作参考的基本单位,而是在地图上移动的实际单位)。实际单位包含的数据要多于参考数据,例如当前的健康状况,助推器等,但是它们仍然需要访问原始统计信息,例如最大健康状况等。对我来说,让一个单元的每个实例都携带一堆已经存储在引用中的不变信息似乎是多余的,所以我想做的是创建另一个类来表示包含诸如当前运行状况之类的数据的衍生单元,等等,以及对引用类的引用,以便它仍然可以访问基本数据。代码看起来像这样(这只是我用来测试概念的测试代码; java的新手):

`//代码开始

public class UnitTest
{
// Main test function.
public static void main(String[] args)
{
    System.out.println("\nStarting test.\n\n");

    ObjectDefinitions.UnitArchetype Base = new     ObjectDefinitions.UnitArchetype("Soldier", 0.8f);
    ObjectDefinitions.Unit Product = new ObjectDefinitions.Unit(Base, 9.0f);

    Base.UnitArchetypeStats();
    Product.UnitStats();

    Base.SetUnitMaxHealth(11.0f);

    Base.UnitArchetypeStats();
    Product.UnitStats();

}
}


class ObjectDefinitions
{
static class UnitArchetype
{
    // Fields
    private String UnitType;
    private float UnitMaxHealth;


    // Constructor
    UnitArchetype(String UnitType, float UnitMaxHealth)
    {

        this.UnitType = UnitType;
        this.UnitMaxHealth = UnitMaxHealth;

    }

    // Methods
    public void UnitArchetypeStats()
    {
        System.out.println("UnitType: " + UnitType + "\nUnitMaxHealth: " + UnitMaxHealth + "\n");

    }

    public void SetUnitMaxHealth(float Health)
    {
        UnitMaxHealth = Health;
    }
}



static class Unit
{
    // Fields
        private ObjectDefinitions.UnitArchetype BaseUnit; // the reference to the base unit
        private float UnitCurrentHealth;

    // Constructor
    Unit(ObjectDefinitions.UnitArchetype Model, float CurrentHealth)
    {
        this.BaseUnit = Model;
        this.UnitCurrentHealth = UnitCurrentHealth;
    }

    // Methods
    public void UnitStats()
    {
        System.out.println("UnitType: " + BaseUnit.UnitType + "\nUnitMaxHealth: " + BaseUnit.UnitMaxHealth + "\nUnitCurrentHealth: " + UnitCurrentHealth + "\n");

    }
}




}

所以我有两个问题。首先,以这种方式链接到基本单元是否可以正常工作而不会引起任何问题,或者是否有可能破坏代码中的某些内容?

其次,是否值得像这样的事情打扰,还是我应该通过添加所需的额外字段来扩展引用类,然后在每次生成新单位时克隆所有信息,以便每个游戏单位包含所有信息?我正在尝试优化内存,但是老实说,即使有额外的字段用于当前运行状况和其他信息,生成的单元仍然只包含十几个字段。值得尝试调整一下这些东西吗?我来自python背景,在撰写本文时实际上是在学习java,所以我真的不太了解java中什么是“沉重的”。

1 个答案:

答案 0 :(得分:0)

以下是一些建议:

  1. 遵循Java命名约定。
  2. 在单元类构造函数中,您已为其自身分配了一个变量(this.UnitCurrentHealth = UnitCurrentHealth;),将其更改为this.UnitCurrentHealth = CurrentHealth;
  3. 您不必要使用静态内部类,因为您的外部类没有其他私有字段或内部类所需的方法。如果要这样做是因为要对它们进行分组,请使用软件包对它们进行分组,然后将每个类移到其自己的文件中。
  4. 您说的
  5. ,您是Java的新手,现在重点关注Java功能。一旦您有足够的信心,就开始着手“设计模式”。

谢谢:)