Eclipse 告诉我 Long 不可比较

Eclipse tells me that Long is not Comparable

我在这里遇到了一个奇怪的情况,即eclipse告诉我Long是"not a valid substitute for the bounded parameter <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
    }
}


我尝试将摘要 class header 更改为:

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>>

但是,具体来说 class 我收到一条通知,建议我将类型参数更改为 <Comparable, Object>

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>{

您只是用自己的类型变量名称遮盖了名称 LongString

因为 T 没有边界,所以它不一定是 Comparable 并且编译器无法将它们验证为 Pair.

的类型参数

你要的是

public class LogBookRecord extends Pair<Long, String>{

一个非泛型的 class,它提供具体类型作为 Pair superclass 声明的类型参数。

The Java Language Specification describes the class declaration syntax.