将Comparable接口添加到SimpleEntry

时间:2013-09-07 23:04:19

标签: java generics

我尝试通过子类将接口Comparable添加到SimpleEntry类。因为SimpleEntry是泛型类型,所以我使用了这个:

public class SimpleEntryComparable<K, V> extends SimpleEntry<K, V> implements
        Comparable<T> {

    public SimpleEntryComparable(K arg0, V arg1) {
        super(arg0, arg1);
        // TODO Auto-generated constructor stub
    }
}

eclipse抱怨“T无法解决为某种类型”。 我对子类的泛型类和添加接口感到困惑......任何人都可以告诉我一些关于这个的事情吗?

2 个答案:

答案 0 :(得分:2)

<T>上的Comparable告诉编译器可以将类与哪种类型进行比较。在您的情况下,如果您希望能够与其他SimpleEntryComparable进行比较,则只需要implements Comparable<SimpleEntryComparable<K,V>>(当然还需要compareTo。)。

答案 1 :(得分:2)

chrylis' answer是正确的。在它下面,我看到你有这个评论:

  

但是在compareTo()中,我想“返回o.getKey() - this.getKey();”

根据此评论,听起来您需要以下内容:

public class SimpleEntryComparable<K extends Comparable<? super K>, V>
extends SimpleEntry<K, V>
implements Comparable<SimpleEntryComparable<K, V>> {

    @Override
    public int compareTo(final SimpleEntryComparable<K, V> other) {
        return getKey().compareTo(other.getKey());
    }
}

这可确保K与自身(或其自身的某些超类型)相当,以便您的代码可以委托给该类型的compareTo实现。这是对引用类型进行通用比较的唯一方法 - as chrylis points out,算术运算are only supported for primitives