У меня есть этот кусок кода, который принимает общий тип 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());
}
}
спасибо. Я сделал предложенные изменения, но я все еще получаю ошибку при использовании веса на одном экземпляре и методе weight() на другом, как это -> return (this.weight) .compareTo (e.weight()); Любая идея, почему я получаю ошибку - (Comparable не может быть преобразован в T)? –
@DeeptiSabnani, потому что ваш метод 'weight()' возвращает 'Comparable' вместо' T', как я уже упоминал в своем ответе выше. – Jesper