我是Java新手,但不是基本编程。因此,我还没有完全了解所有术语及其含义。话虽如此,我可能没有描述我想要的东西,所以我会尽量做到尽可能具体。
我正在编写一个抽象的父类Status,它将是父类,如(Buff)和(Debuff),它们很可能也是抽象的。我只想说,最终我将使用自己的类名编写具体的类,这些类在某种程度上从Status继承。
我们的想法是迭代这些对象的列表并让它们修改另一个Dragon.object。顺序变得很重要,因为这些Status对象以数学方式修改另一类对象中的值。由于这个以及没有这些对象将被实例化的顺序这一事实,当一个Status将值增加10%而另一个从该值中减去5时,我最终会得到意想不到的结果。
我提供此背景的原因是因为我不确定我是否正确接近这个问题,并希望如果我走错了路,有人可以在这里纠正我。
关于我的问题;通过其中一个字段中的值比较对象似乎很容易。这对类类型也适用吗?如果是这样,我将如何编写比较对象类型的比较器。通过“对象类型”,我的意思是;
比较:Status.Buff.Percentage.Strength10Percent到Status.Buff.Additive.Strength10
我是否应该在此类中放置一个指定优先级的字段,然后在排序时使用自定义比较器,或者是足够的对象类型(如果Java可以这样做)?
感谢阅读。
答案 0 :(得分:1)
如果你想用它们都有的东西进行比较,即Buff
或Status
中的某个字段,就有可能。在这种情况下,您可以在Buff
或Status
中使用非抽象compareTo方法(确保类implements Comparable
)。由于子类继承自Buff
或Status
,因此将从子节点调用相同的compareTo()
方法,除非它们覆盖它(当然不应该这样做)。
答案 1 :(得分:0)
您可能需要优先级字段。
话虽如此,您可以使用this.getClass().getName()
获取当前类的名称(如果这足以让您找到优先级)。然后,您可以在compareTo方法中使用类名。
您还可以使用instanceof
来检查特定对象是否是特定类的子类的对象。例如,请回到您的示例:
Status.Buff.Percentage.Strength10Percent
的对象将返回true:
obj instanceof Percentage
或
obj instanceof Buff
答案 2 :(得分:0)
我认为你采用了错误的设计方法。你要做的是计算RPG的修饰符,对吧?如果是这种情况,您应该让它们都使用apply(Character c)
方法实例化一个接口,该方法封装修改并将其应用于角色(或机器人或您应用修改器的任何内容)。 Character
应该实现一个界面,该界面包含要修改的属性的getter和setter,以便apply()
可以进行调整。