Затмение говорит мне, что Лонг не сравним
Я нахожусь в странной ситуации здесь, а именно затмение говорит мне, что Лонг "не является допустимой заменой ограниченного параметра <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>
,
1 ответ
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 описывает синтаксис объявления класса.