Sus*_*ded 1 java generics types parametric-polymorphism
我在这里处于一种奇怪的情况,即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();
}
}
Run Code Online (Sandbox Code Playgroud)
具体对:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试将抽象类标题更改为:
public abstract class Pair<T extends Comparable<T>, R> implements Comparable<Pair<T, R>>
Run Code Online (Sandbox Code Playgroud)
这没有帮助,也是:
public abstract class Pair<T, R> implements Comparable<Pair<T, R>>
Run Code Online (Sandbox Code Playgroud)
但是,在具体的类中,我得到一个通知,表明我应该将类型参数更改为<Comparable, Object>
.
public class LogBookRecord<Long, String> extends Pair<Long, String>{
^ ^
| |
generic type variable declaration (new type names) |
generic type arguments
Run Code Online (Sandbox Code Playgroud)
该代码相当于
public class LogBookRecord<T, R> extends Pair<T, R>{
Run Code Online (Sandbox Code Playgroud)
您只需将名称Long
和String
您自己的类型变量名称隐藏起来.
由于T
没有边界,因此不一定Comparable
,编译器也无法将它们作为类型参数进行验证Pair
.
你想要的是什么
public class LogBookRecord extends Pair<Long, String>{
Run Code Online (Sandbox Code Playgroud)
一个非泛型的类,它提供具体类型作为Pair
超类声明的类型参数.
归档时间: |
|
查看次数: |
89 次 |
最近记录: |