Java 你有什么理由不';不要将一个包含对另一个类的引用的类作为一个字段(这样做是否值得)?
我正在用java开发一个简单的游戏,其中的单位是类,它们的名称、运行状况等存储在字段中。这些单位从文件中读入,然后存储在hashmap中,形成一个主库,在生成新单位时用作参考 我试图决定如何在游戏中存储实际单位(不是用作参考的基本单位,而是在地图上移动的实际单位)。实际单位包含的数据比参考数据多,如当前生命值、助推器等,但它们仍然需要访问原始统计数据,如最大生命值等。对我来说,让一个单位的每个实例携带一堆已经存储在引用中的不变信息似乎是多余的,所以我想做的是创建另一个类来表示包含当前健康等数据的衍生单位,以及对引用类的引用,以便它仍然可以访问基本数据。代码看起来像这样(这只是我用来测试这个概念的测试代码;对java来说是新的): `//代码开头Java 你有什么理由不';不要将一个包含对另一个类的引用的类作为一个字段(这样做是否值得)?,java,class,memory,reference,Java,Class,Memory,Reference,我正在用java开发一个简单的游戏,其中的单位是类,它们的名称、运行状况等存储在字段中。这些单位从文件中读入,然后存储在hashmap中,形成一个主库,在生成新单位时用作参考 我试图决定如何在游戏中存储实际单位(不是用作参考的基本单位,而是在地图上移动的实际单位)。实际单位包含的数据比参考数据多,如当前生命值、助推器等,但它们仍然需要访问原始统计数据,如最大生命值等。对我来说,让一个单位的每个实例携带一堆已经存储在引用中的不变信息似乎是多余的,所以我想做的是创建另一个类来表示包含当前健康等数据的
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中什么是“重”的
this.UnitCurrentHealth=UnitCurrentHealth;
)将其更改为this.UnitCurrentHealth=CurrentHealth代码>
谢谢:)注意java namaing约定。方法名和变量名应该以小写字符开头不知道你的意思,但如果我是你,我不会使用静态内部类,而是单独的类我没有阅读你的全文,但基于你的标题,在某些情况下,需要将另一个类的和对象包含为类字段,并扩展另一个类而不是使用其obj。它的Has-A vs-Is-A继承类型。@Jens如果它不是我正在协作的代码,或者只是约定的,它会有什么不同吗?它会影响编译还是什么?@Stultuske所以只需在脚本级别定义每个类,而不是作为嵌套类的一部分?谢谢。我只是开始使用java,因为python对于我正在尝试做的事情来说太慢了,而且这是一个非常好的学习过程。