1

私はここで奇妙な状況に陥っています。つまり、Eclipse は、Long が「境界付きパラメーターの有効な代替ではない」ことを教えてくれます<T extends Comparable<? super T>>。何が原因である可能性があるかについての提案はありますか? 関連するコードを以下に貼り付けます

抽象ペア:

public abstract class Pair<T extends Comparable<? super T>, R> implements Comparable<Pair<T, R>>{

    private T tt;
    private R rr;

    public Pair(T t, R r){
        tt = t;
        rr = r;
    }

    @Override
    public String toString(){
        return tt+ ": " +rr.toString();
    }
}



コンクリートペア:

import utilities.Pair;

public class LogBookRecord<Long, String> extends Pair<Long, String>{

    LogBookRecord(Comparable t, Object r) {
        super(t, r);
        // TODO Auto-generated constructor stub
    }
}


抽象クラスヘッダーを次のように変更しようとしました:

public abstract class Pair<T extends Comparable<T>, R> implements Comparable<Pair<T, R>>

これは役に立ちませんでした。

public abstract class Pair<T, R> implements Comparable<Pair<T, R>>

しかし、具体的なクラスでは、型パラメーターを に変更する必要があることを示唆する通知を受け取ります<Comparable, Object>

4

1 に答える 1

7
public class LogBookRecord<Long, String> extends Pair<Long, String>{
                                ^                           ^
                                |                           |
      generic type variable declaration (new type names)    |
                                                  generic type arguments

そのコードは次と同等です

public class LogBookRecord<T, R> extends Pair<T, R>{

名前を隠し、独自の型変数名を付けたLongだけです。String

Tには境界がないため、必ずしもそうとは限らずComparable、コンパイラはそれらを への型引数として検証できませんPair

あなたが欲しいのは

public class LogBookRecord extends Pair<Long, String>{

Pairスーパークラス宣言への型引数として具象型を提供する、ジェネリックではないクラス。

Java 言語仕様では、クラス宣言の構文について説明しています。

于 2015-05-26T15:44:15.077 に答える