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

您只是用自己的类型变量名称隐藏了名称LongString

由于T没有界限,因此不一定Comparable,并且编译器无法将它们验证为Pair.

你想要的是

public class LogBookRecord extends Pair<Long, String>{

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

Java 语言规范描述了类声明语法。

于 2015-05-26T15:44:15.077 回答