1

それをサブクラス化することにより、クラス SimpleEntry にインターフェイス Comparable を追加しようとしました。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
    }
}

そして、日食は「Tを型に解決できない」と不平を言いました。ジェネリック クラスをサブクラス化し、インターフェイスを追加することについて混乱しています...誰でもこれについて教えてもらえますか?

4

2 に答える 2

2

<T>onComparableは、クラスを比較できる型をコンパイラに伝えます。あなたの場合、他SimpleEntryComparableの s と比較できるようにしたい場合は、 が必要ですimplements Comparable<SimpleEntryComparable<K,V>>(そしてcompareToもちろん!)。

于 2013-09-07T23:06:05.287 に答える
2

クリリスの答えは正しいです。その下に、次のコメントがあることがわかります。

しかし、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実装に委譲できます。これは、参照型の一般的な比較を行う唯一の方法です。chrylis が指摘しているように、算術演算はプリミティブに対してのみサポートされています。

于 2013-09-08T00:01:25.063 に答える