概览
始终要覆盖toString
在实际应用开发中,toString应当返回对象中包含的所有指的关注的信息,这样在实际开发的时候,可以通过toString打印出一切你想知道的信息,在输出日志的时候至关重要。无论是否指定格式,都为toString返回值中包含的所有信息,提供一种编程式的访问途径。
例如Integer的toString方法:
public static String toString(int i, int radix) {
if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
radix = 10;
/* Use the faster version */
if (radix == 10) {
return toString(i);
}
char buf[] = new char[33];
boolean negative = (i < 0);
int charPos = 32;
if (!negative) {
i = -i;
}
while (i <= -radix) {
buf[charPos--] = digits[-(i % radix)];
i = i / radix;
}
buf[charPos] = digits[-i];
if (negative) {
buf[--charPos] = '-';
}
return new String(buf, charPos, (33 - charPos));
}
谨慎的覆盖clone
Cloneable并没有包含任何方法,它只决定了Object中受保护的clone方法实现的行为:如果一个类实现了Cloneable,Object的clone方法就返回对象中的逐域拷贝,否则就会抛出CloneNotSupportException异常。这是接口的一种极端非典型的用法。
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
实现Comparable接口
compareTo方法并没有在Object中声明,相反它是Comparable接口中的唯一方法,compareTo方法不但允许进行简单的同等性比较,而且允许执行顺序比较,与Object的equals方法具有相似的特性,,他还是一个泛型。类实现了Comparable接口,表明它的实例具有内在的排序关系。
Arrays.sort(a);