为什么在Java中使用类似的接口?
我想问为什么我们在java中使用类似的接口?如果不使用可比较的接口,只创建compareTo方法不是更简单吗
而不是这样做:
//some class that implements comparable
public int compareTo(someClass someInstanceOfThatClass) {
// do stuff that returns -1,0,or 1
}
为什么我们不能这样做:
//some class that does NOT implement comparable, but we still
//make a compareTo method
public int compareTo(someClass someInstanceOfThatClass) {
// do stuff that returns -1,0, or 1
}
我想我的问题是,如果我们可以在不受某个接口(compariable)的强迫的情况下创建一个comparieto方法,为什么还要麻烦实现compariable呢
# 1 楼答案
我认为它回到了接口的固有概念。 您始终确保实现了可比较接口的每个类都具有可比较的能力,有时您需要这种保证。 例如,如果您有一个具有可比较类型的参数的方法,那么您可以确保comapreTo是使用该参数实现的,并且该参数是语义上可比较的。 但如果没有接口,你就不能得到这种保证
# 2 楼答案
Comparable
是一个接口,因此它强加了一个其他人可能遵循的契约。例如,仅当元素是Comparable
的实例并且在内部依赖compareTo
方法来实现排序时,调用Collections.sort(list)
才有效# 3 楼答案
Java的类型系统是nominal,而不是structural,因此仅仅拥有接口所需的方法不足以实现它;您还必须声明该类实现该接口。在其他一些语言(如Typescript)中,拥有具有正确签名的方法就足够了,但Java不是这样的
如果您只是从自己的代码中调用
compareTo
方法,那么这可能无关紧要,但是如果您使用的类或方法来自标准库或其他以Comparable
事物为参数的库,那么您的类将需要实现接口,以便您可以将对象传递给它们