在抽象类中实现compareTo()

时间:2019-02-07 16:20:49

标签: java sorting comparable

我的应用程序中有一个抽象类(我们称之为BaseRule)。 BaseRule实现Comparable接口,并包含抽象方法签名public abstract int getExecOrder()

BaseRule类中compareTo()方法的BaseRule实现中,getExecOrder()的返回值用于比较对象。

目前,我有3个BaseRule类的具体实现,每个实现都有getExecOrder()方法

BaseRule类实现Comparable接口的最终目的是将BaseRule对象的集合传递给实用程序,该实用程序需要对这些对象进行排序以确保它们是以正确的顺序执行。

在这种情况下,执行顺序仅在类级别上有意义,这意味着必须在执行任何BaseRuleA之前执行每个BaseRuleB,但是每个BaseRuleB实际上都等于其他BaseRuleB,因此处理这些BaseRuleB对象的顺序无关紧要

我的问题是,有没有比使用getExecOrder()方法更好的方法来比较这些对象?

现在,我只有3个BaseRule的具体实现,因此只需将返回值1,2,3分配给那些getExecOrder()方法调用就足够了,但是如果另一个开发人员添加了一个新的BaseRule实现,他们将不得不扫描所有现有的实现,并(可能)更新所有类中的返回值以适应新的BaseRule

有更好的实施想法吗?

2 个答案:

答案 0 :(得分:3)

我猜您在谈论以下问题吗?

componentWillUnmount

这似乎很合理。如果您担心将来必须更改现有类的值,则只需留下很大的空白,而不要使用连续的整数。

A = 10000

B = 20000

C = 30000

现在您有9999个空间可在这些实现之间放置将来的实现。


也许还会添加一个单元测试,该单元测试使用反射来检查没有两个实现具有相同的优先级。

答案 1 :(得分:1)

老实说,您建议的实现是实现此目标的最佳方法。一定要在摘要getExecOrder()中添加一些注释,以便将来的开发人员确切地知道其实现应该执行的操作。