首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java覆盖compareTo

Java覆盖compareTo
EN

Stack Overflow用户
提问于 2013-10-10 16:42:07
回答 6查看 18.5K关注 0票数 5

我有一个实现类似接口的类。在这个类中,我需要重写compareTo方法,以便根据Long值对对象进行排序。

我不知道的是如何进行长类型的比较。在尝试检查值是否大于或小于另一个长值时,会出现错误。我知道龙是长的对象,但不知道如何比较两个龙的。

代码示例:

代码语言:javascript
复制
public int compareTo(MyEntry<K, V> object) {
    if (this.value < object.value)
        return -1;
    if (this.value.equals(object.value))
        return 0;

    return 1;
}

错误消息:

代码语言:javascript
复制
           operator < cannot be applied to V,V
if (this.value < object.value)
                       ^

V,V很长,很长

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-10-10 16:52:34

您的问题是,MyEntry<K, V>没有告诉编译器您要比较的对象类型。它不知道你在比较长值。最好的方法是不用担心您比较的对象类型(假设您的对象实现了可比较的),只需使用

代码语言:javascript
复制
return this.value.compareTo(object.value);

但是,如果您出于某种原因想手动执行此操作,请执行以下操作:

代码语言:javascript
复制
public int compareTo(MyEntry<K, V> object) {
    if ((Long) this.value < (Long) object.value)
        return -1;
    if (this.value.equals(object.value))
        return 0;

    return 1;
}
票数 9
EN

Stack Overflow用户

发布于 2013-10-10 16:48:38

代码语言:javascript
复制
Long l1 = new Long(3);
Long l2 = new Long(2);

return l1.compareTo(l2);

简单no?

票数 8
EN

Stack Overflow用户

发布于 2013-10-10 16:55:56

看起来会是这样的:

代码语言:javascript
复制
@Override
public int compareTo(MyEntry<K, V> object) {
        if (object == null) {
            throw new NullPointerException("Null parameter");
        } else if (!this.getClass().equals(object.getClass())) {
            throw new ClassCastException("Possible ClassLoader issue.");
        } else {
            return this.longValue.compareTo(object.longValue);
        }

}

巧合的是,我们最近用Java做了一个比较教程。也许它能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19301547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档