Java的可比接口:处理compareTo()的null参数

时间:2012-01-20 01:57:12

标签: java exception null comparable

为Framework扩展编写一些类,我有以下代码:

public class TimeImpl implements Time, Comparable<TimeImpl>, Serializable
{
...
    public int compareTo(TimeImpl other)
    {
        if (other == null)
            throw new ClassCastException("null");
        return Long.valueOf(toSeconds()).compareTo(other.toSeconds());
    }
}

如果你问我,非常简单的实施。我的问题是:据我所知,Comparable接口的javadoc对空参数没有任何说明。我应该费心去检查吗?我是否应该更改抛出的异常类型,在这种情况下我应该返回其他值吗?其他人如何处理此事?

3 个答案:

答案 0 :(得分:3)

我更倾向于NullPointerException而不是ClassCastException

此约定也遵循JDK实现。

答案 1 :(得分:3)

实际上,Comparable接口说出有关处理null参数的内容。

  

请注意,null不是任何类的实例,而e.compareTo(null)   即使e.equals(null)返回,也应抛出NullPointerException   假的。

答案 2 :(得分:1)

下面的代码是来自java的Integer的compareTo方法:

 public int compareTo(Integer anotherInteger) 
 {
    int thisVal = this.value;
    int anotherVal = anotherInteger.value;
    return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
 }

为什么不以Integer的方式实现compareTo方法。