- 可以用instanceof检查一个对象是否实现了某个特定接口
anObject instanceof Comparable
- 接口中不能包含实例域或者静态方法,但是可以包含常量,没有被实现的方法。接口中的方法自动被设置为public,域自动被设为public static final
-
java.lang.Comparable<T>
java.lang.CompareTo(T other)
用这个对象与other进行比较。如果这个对象小于other则返回负值;否则返回正值。
class Employee implements Comparable<Employee>
{
public int compareTo(Employee other){
return Double.compare(salary,other.salary);
}
}
-
java.util.Arrays
static void sort(Object[] a)
使用mergesort算法对数组a中的元素进行排序。要求数组中的元素必须属于实现了Comparable中的类,并且元素之间必须是可比较的。 -
java.lang.Integer
static int compare(int x, int y)
如果x<y返回一个负整数;如果x=y返回0;否则返回一个正整数。
对象克隆
Cloneable接口的出现与接口的正常使用没有任何关系。接口在这里只是作为一个标记,表明类的设计者知道要进行克隆处理。如果一个对象需要克隆,而没有实现Cloneable接口,就会产生一个已检测异常。
即使clone的默认实现(浅拷贝)能够满足需求,也应该实现Cloneable接口,将clone重定义为public,并调用super.clone()。
class Employee implements Cloneable
{
//raise visibility level to public,change return type
public Employee clone() throws CloneableSupportedException
{
return (Employee) super.clone();
}
}
为了实现深拷贝,必须克隆所有可变的实例域。
class Employee implements Cloneable{
public Employee clone() throws CloneNotSupportedException{
//call Object.clone()
Employee cloned = (Employee) super.clone();
//clone mutable fields
cloned.hireDay = (Date) hireDay.clone();
return cloned;
}
}