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

发布于 2024-12-28 08:42:23 字数 474 浏览 1 评论 0原文

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

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 没有提及任何关于 null 参数的信息。我应该费心检查一下吗?我应该更改抛出的异常类型吗?在这种情况下我应该返回其他值吗?那里的其他人如何处理这个问题?

Writing some classes for a Framework extension, and I have the following code:

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());
    }
}

Pretty straightforward implementation, if you ask me. My question is: as far as I can tell, the javadocs for the Comparable interface say nothing regarding null arguments. Should I bother checking for it? Should I change the type of exception thrown, should I return some other value in that case? How are other people out there handling this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

笔落惊风雨 2025-01-04 08:42:23

实际上, Comparable 接口确实说了一些关于处理null参数的信息。

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

Actually, the Comparable interface does say something about handling null arguments.

Note that null is not an instance of any class, and e.compareTo(null)
should throw a NullPointerException even though e.equals(null) returns
false.

成熟稳重的好男人 2025-01-04 08:42:23

我更喜欢抛出 NullPointerException 而不是 ClassCastException。

JDK 实现也遵循此约定。

I prefer to throw NullPointerException rather than ClassCastException.

This convention is also followed by JDK implementations.

这个俗人 2025-01-04 08:42:23

下面的代码是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方法呢?

The code below is the compareTo method of Integer from java:

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

why not implement your compareTo method in the way Integer does.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文