题
我看到这样的代码
class A implements Comparable<A> {
}
这是什么意思,它的优点和缺点是什么?
解决方案
您对此(以及任何其他“实施”声明)所拥有的优势,您可以”抽象的“代替对象的类型和代码。
考虑一下
class A implements Comparable {
....
}
class B implements Comparable {
....
}
class C implements Comparable {
....
}
然后,您可能会编码可以使用的东西 可比 而不是特定类型:
public void doSomethingWith( Comparable c ) {
c.compareTo( other ); // something else...
}
并像:
doSomethingWith( new A() );
doSomethingWith( new B() );
doSomethingWith( new C() );
因为您并不真正在乎班级的类型,所以您只是在乎它确实实现了界面。
这个(到实施的界面程序)是OO编程世界中最强大的技术之一,因为它可以促进 低耦合.
其他提示
实现可比接口意味着可以将A与其他实例进行比较。
Java中的许多操作都涉及排序使用可比接口中定义的方法来确定A的实例是否大于或等于其他实例。
通过实现这些方法,您可以使用很多方便的功能,例如Java排序,将用作二进制树的钥匙的实例等等。
这意味着可以使用可比较的比较方法对A类排序:
A a1 = new A(1);
A a2 = new A(3);
// -1, 0, or 1 depending on whether a2 is less than, equal to, or greater than a1
int order = a1.compareTo(a2);
可比较的班级使用自然订购。
自Java 5是 比较器. 。您可以传递此对象,并具有多种方法来比较和分类目标类。例如,有时您可能想按名称对名称类进行排序,而其他时间则以姓氏为单位。可比较只能为您提供一种方法,但是您可以拥有多个比较器实例。
这意味着该类是可以通过函数进行操作的类,这些功能期望其参数是可以将其与相同类型的其他对象进行比较的对象(例如列表的预定义排序功能)。
实现可比接口意味着类支持接口所需的某些功能(具体而言, compareTo()
方法),在班级上执行的分类(或其他)操作将利用他们的工作,而无需关心班级的其余部分。
更多细节:http://java.sun.com/j2se/1.4.4.2/docs/api/java/lang/lang/comparame.html
除了其他所有人所说的话,通过实施接口(或延长课程),您还可以获得编译器的执行Supertype的合同。在“可比”的情况下,这意味着如果您未能在实现类中实现“ int compareTo(aa)”方法,则会获得编译器错误。将注释“@override”添加到实施方法中,提供了更多编译时间安全;如果您未能使用正确的签名实现该方法,则编译器会告诉您。与运行时错误相比,编译时错误更容易,更便宜。此外,实现接口允许将实现类的任何实例视为将接口类型作为参数或通用参数的方法(和构造函数)的接口类型。例如,“ java.util.collections.max(Collection coll)”方法采用基本类型必须扩展“可比”的集合。
http://download.oracle.com/javase/7/docs/api/java/java/util/collections.html#max(java.util.collection)
这意味着该类的对象可以在集合中很容易分类,因为它们可以彼此进行比较。另一个选项是实现一个比较器,该比较器是负责对其他类进行排序的类。可比的是将分类逻辑直接放在要排序的类中。比较器将分类逻辑放在另一个类别中。