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