2015-05-26 5 views
1

У меня здесь странная ситуация, а именно затмение говорит мне, что Long является «недействительным заменой ограниченного параметра <T extends Comparable<? super T>>». Какие-либо предложения о том, что может быть причиной? Я вставив соответствующий код ниже

Eclipse говорит мне, что Long не сопоставим

абстрактного Pair:

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

+2

Как вы думаете, 'класс LogBookRecord ' делает (имена между '' <...>)? Почему ты так думаешь? –

+0

Он присваивает типы общим параметрам в абстрактном классе? – Suspended

+0

Вы объявили свои собственные общие типы с именем 'Long' и' String'. – GriffeyDog

ответ

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

Вы просто сопровождали имена Long и String с именами переменных собственного типа.

С T не имеет границ, необязательно Comparable, и компилятор не может подтвердить их как аргументы типа Pair.

Что вы хотите

public class LogBookRecord extends Pair<Long, String>{ 

Класс, который не является универсальным, что дает конкретные типы в качестве аргументов типа к Pair суперкласса декларации.

The Java Language Specification describes the class declaration syntax.

+0

Ошибки исчезли, но теперь я не могу создать экземпляр объекта. – Suspended

+0

@ Подсветка Просьба уточнить. Какой тип вы не можете создать? Какая ошибка это дает вам? –

+0

Я не могу создать экземпляр LogBookRecord. Я не пытался запустить его, но конструктор жалуется: «Конструктор Pair (Long, Object) не определен» – Suspended