java在抽象类中实现compareTo()
我的应用程序中有一个抽象类(我们称之为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
有没有更好的实施方案
# 1 楼答案
我猜你是在说下面这类事情吧
这似乎相当合理。如果您担心将来必须更改现有类的值,那么只需留下较大的间隙,而不是使用连续整数
A=10000
B=20000
C=30000
现在,您有9999个空间可以在这些空间之间放置未来的实现
也许还可以添加一个单元测试,它使用反射来检查没有两个实现共享相同的优先级
# 2 楼答案
老实说,我认为你提出的实施方案是最好的办法。一定要在摘要
getExecOrder()
中添加一些注释,以便未来的开发人员确切地知道其实现应该做什么