Ваше объявление T не «удлиняет» сравнимое, поэтому вы не можете использовать его для сравнения.
Вы можете изменить его:
public class Node<T extends Comparable<T>> implements Comparable<Node<T>>{
T value;
Node<T> next;
public Node(T value){
this.value = value;
this.next = null;
}
public int compareTo(Node<T> other){
return this.value.compareTo(other.value);
}
}
Это предполагает, что T реализует Сопоставимые. В противном случае, если T на самом деле не сравнимо, вы можете просто выполнить сравнение на уровне узла. Но вы должны, вероятно, все-таки объявить свой класс, как этот
public class Node<T extends Something>
так что вы методы из Something
работать с при выполнении сравнения.
Если я вернусь в начале: При создании экземпляра вашего узла, вы делаете что-то вроде этого:
Node<MyType> node = new Node<MyType>();
MyType станет вашим T. Является ли MyType сопоставимое? Если это так, вы можете объявить свой класс, как показано выше. В противном случае вы не сможете сделать T.compareTo (aka MyType.compareTo), поэтому вам нужно выполнить сравнение, используя другие поля из MyType.
Я надеюсь, что это достаточно ясно ..
вы определяете 'compareTo' для типа' T', внутри которого вы вызываете '' compareTo' на this.value' который снова набрать 'T'. Смотрите так: перед тем, как вы определите 'compareTo' для типа, как вы можете называть' compareTo' в этом типе? – SomeDude
Нет, я просто попробовал и не работал. –
, но спасибо за помощь. –