Затмение говорит мне, что Лонг не сравним

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

Другие вопросы по тегам