按集合数据结构中的类类型或类名对对象进行排序

时间:2013-04-24 04:56:53

标签: java sorting object

我是Java新手,但不是基本编程。因此,我还没有完全了解所有术语及其含义。话虽如此,我可能没有描述我想要的东西,所以我会尽量做到尽可能具体。

我正在编写一个抽象的父类Status,它将是父类,如(Buff)和(Debuff),它们很可能也是抽象的。我只想说,最终我将使用自己的类名编写具体的类,这些类在某种程度上从Status继承。

我们的想法是迭代这些对象的列表并让它们修改另一个Dragon.object。顺序变得很重要,因为这些Status对象以数学方式修改另一类对象中的值。由于这个以及没有这些对象将被实例化的顺序这一事实,当一个Status将值增加10%而另一个从该值中减去5时,我最终会得到意想不到的结果。

我提供此背景的原因是因为我不确定我是否正确接近这个问题,并希望如果我走错了路,有人可以在这里纠正我。

关于我的问题;通过其中一个字段中的值比较对象似乎很容易。这对类类型也适用吗?如果是这样,我将如何编写比较对象类型的比较器。通过“对象类型”,我的意思是;

比较:Status.Buff.Percentage.Strength10Percent到Status.Buff.Additive.Strength10

我是否应该在此类中放置一个指定优先级的字段,然后在排序时使用自定义比较器,或者是足够的对象类型(如果Java可以这样做)?

感谢阅读。

3 个答案:

答案 0 :(得分:1)

如果你想用它们都有的东西进行比较,即BuffStatus中的某个字段,就有可能。在这种情况下,您可以在BuffStatus中使用非抽象compareTo方法(确保类implements Comparable)。由于子类继承自BuffStatus,因此将从子节点调用相同的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()可以进行调整。