java - Java编程实践: stacking enums and enum constructors,和子类化哪个更好?

标签 java enums subclassing multiple-constructors

给定有限数量的不同种类的项目,用堆叠枚举和枚举构造函数表示它们更好,还是将它们子类化更好?还是有更好的方法?

为了给您一些背景信息,在我的小型 RPG 程序(具有讽刺意味的是它应该很简单)中,一个角色的元素栏中有不同种类的元素。项目根据其类型、用途和效果而有所不同。

例如,元素栏中的一项是名为 Gremlin 的法术卷轴,可调整 Utility 属性。另一个项目可能是一把名为 Mort 的剑,用于战斗并造成伤害。

在我的 RPG 代码中,我现在尝试了两种表示库存项目的方法。一种方法是子类化(例如,InventoryItem -> Spell -> AdjustingAttributes;InventoryItem -> Weapon -> Sword)并在需要时实例化每个子类,并分配诸如 Gremlin 和 Mort 等名称的值。

另一种方法是堆叠枚举和枚举构造函数。例如,我为 itemCategory 和 itemSpellTypes 以及 itemWeaponTypes 创建了枚举,而 InventoryItem 枚举是这样的:

public enum InventoryItem {
   GREMLIN(itemType.SPELL, itemSpellTypes.ATTRIBUTE, Attribute.UTILITY),
   MORT(itemType.WEAPON, itemWeaponTypes.SWORD, 30);

   InventoryItem(itemType typeOfItem, itemSpellTypes spellType, Attribute attAdjusted) {
   // snip, enum logic here
   }
   InventoryItem(itemType typeOfItem, itemWeaponTypes weaponType, int dmg) {
   // snip, enum logic here 
   }
   // and so on, for all the permutations of items. 

}

是否有比这两种方法更好的 Java 编程实践?或者,如果这些是唯一的方法,那么两者中哪一个更好?预先感谢您的建议。

最佳答案

如果只保存静态数据并且逻辑非常少(最好根本没有逻辑),那么枚举是好的。如果您的对象要根据其种类具有不同的行为,那么将它们实现为子类通常是个好主意。

正如其他人所提到的,您很可能会向对象添加属性,而这些属性并非对所有类型都有意义。例如。颜色属性对武器有意义,但对法术没有意义。在那种情况下,武器和法术不应该在同一个枚举中。

关于java - Java编程实践: stacking enums and enum constructors,和子类化哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2681029/

相关文章:

java - ActiveMQ - 保留消耗的消息直到确认删除

python - 使用多重继承,类没有来自父类的变量的属性

java - 为什么这段代码中的 get 方法被划掉了?

java - Java/Groovy 中是否有可用的临时报告生成器库?根据选择的维度/度量生成 SQL 查询

Java 通用 Csv 字符串到枚举列表

ios - 初始化的枚举返回错误的 hashValue

asp.net-mvc - MVC UpdateModel 和子类与基类

Python:子类化 frozenset 不可迭代?

java - 实验Java序列化的不兼容性

c++ - glewInit() 时 OpenGL 错误 GL_INVALID_ENUM (0x0500)