给定有限数量的不同种类的项目,用堆叠枚举和枚举构造函数表示它们更好,还是将它们子类化更好?还是有更好的方法?
为了给您一些背景信息,在我的小型 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/