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



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

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

其思想是遍历这些对象的列表,并让它们修改另一个Dragon.object。顺序变得很重要,因为这些Status对象在数学上修改另一类对象中的值。由于这个原因,以及这些对象实例化的顺序不一致,当一个Status将值增加10%,而另一个Status从该值中减去5时,我最终会得到意想不到的结果。

我提供这个背景的原因是因为我不确定我是否正确地处理了这个问题,希望如果我走错了路,有人能在这里纠正我。

关于我的问题;通过对象字段中的值来比较对象似乎很容易。这对类类型也适用吗?如果是这样,我该如何编写一个比较器来比较对象类型。这里的"对象类型"是指;

比较:Status.Buff.Percentage。

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

如果你想比较的东西,他们都有,即BuffStatus的一些领域,这是可能的。在这种情况下,您可以在BuffStatus中使用非抽象的comparareto方法(确保使用implements Comparable类)。当子类继承BuffStatus时,将从子类调用相同的compareTo()方法,除非它们覆盖它(实际上不应该这样做)。

我认为你采用了错误的设计方法。你要做的是计算RPG的修饰符,对吧?如果是这种情况,您应该让它们都使用apply(Character c)方法实例化一个接口,该方法封装修改并将其应用于角色(或机器人或任何您正在应用修改器的对象)。Character应该实现一个接口,其中包含您想要修改的属性的getter和setter,以便apply()可以进行调整。

您可能需要一个优先级字段。

话虽如此,您可以使用this.getClass().getName()来获取当前类的名称,如果这足以让您找到优先级。然后,您可以在compareTo方法中使用类名。

您还可以使用instanceof来检查特定对象是否为特定类的子类的对象。例如,回到你的例子:

Status.Buff.Percentage.Strength10Percent的对象将返回true:

obj instanceof Percentage

obj instanceof Buff

最新更新