2016-07-04 2 views
1

У меня есть этот кусок кода, который принимает общий тип Comparable, а мой класс реализует Comparable Interface. Я получаю сообщение об ошибке в методе compareTo() в классе, заявив, что Comparable не может быть преобразован в T # 1.Сопоставимый не может быть преобразован в T # 1

Полное сообщение об ошибке IS->

Edge.java:40: error: method compareTo in interface Comparable<T#2> cannot be applied to given types;  
    return (this.weight).compareTo(e.weight()); 
         ^
    required: 
     T#1 found: Comparable reason: argument mismatch; Comparable cannot be converted to T#1 where 
    T#1,T#2 are type-variables: 
     T#1 extends Comparable<T#1> declared in class Edge 
     T#2 extends Object declared in interface Comparable 
1 error 

Если нет (this.weight) возвращает тип 'T' вместо Сопоставимые? Также метод weight() возвращает Comparable.

Я не совсем понимаю это. Будет здорово, если кто-нибудь сможет уточнить, почему я получаю эту ошибку. Ошибка при замене this.weight на this.weight().

public class Edge<T extends Comparable<T>> implements Comparable<Edge>{ 
    private int vertex1; 
    private int vertex2; 
    private T weight; 

    public Edge(int vertex1, int vertex2, T weight){ 
     this.vertex1 = vertex1; 
     this.vertex2 = vertex2; 
     this.weight = weight; 
    } 

    public int either(){ 
     return vertex1; 
    } 

    public int from(){ 
     return vertex1; 
    } 

    public int other(){ 
     return vertex2; 
    } 

    public int to(){ 
     return vertex2; 
    } 

    public Comparable weight(){ 
     return weight; 
    } 

    public String toString(){ 
     String s = ""; 
     s += vertex1 + " " + vertex2 + " " + weight; 
     return s; 
    } 

    @Override 
    public int compareTo(Edge e){ 
     return (this.weight).compareTo(e.weight()); 
    } 

} 

ответ

1

Ваш класс Edge имеет параметр типа, но вы используете raw typeEdge без параметра типа. Добавьте параметр типа:

public class Edge<T extends Comparable<T>> implements Comparable<Edge<T>> { 
    // ... 

    @Override 
    public int compareTo(Edge<T> e) { 
     return this.weight.compareTo(e.weight); 
    } 
} 

Кроме того, почему метод weight() возвращает Comparable? Вместо этого он должен вернуть T.

public T weight() { 
    return weight; 
} 
+0

спасибо. Я сделал предложенные изменения, но я все еще получаю ошибку при использовании веса на одном экземпляре и методе weight() на другом, как это -> return (this.weight) .compareTo (e.weight()); Любая идея, почему я получаю ошибку - (Comparable не может быть преобразован в T)? –

+0

@DeeptiSabnani, потому что ваш метод 'weight()' возвращает 'Comparable' вместо' T', как я уже упоминал в своем ответе выше. – Jesper

Смежные вопросы