2016-07-30 3 views
2

У меня есть этот простой узел:Как использовать compareTo с узлом?

public class Node<T> implements Comparable<Node>{ 
    T value; 
    Node<T> next; 
    public Node(T value){ 
     this.value = value; 
     this.next = null; 
    } 
    public int compareTo(Node other){ 
     return this.value.compareTo(other.value); 
    } 
} 

Затмение становится умным и просит меня бросить «this.value». Выполнение его с помощью int не работает. Как это сделать?

+0

вы определяете 'compareTo' для типа' T', внутри которого вы вызываете '' compareTo' на this.value' который снова набрать 'T'. Смотрите так: перед тем, как вы определите 'compareTo' для типа, как вы можете называть' compareTo' в этом типе? – SomeDude

+0

Нет, я просто попробовал и не работал. –

+0

, но спасибо за помощь. –

ответ

4

Ваше объявление 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.

Я надеюсь, что это достаточно ясно ..

+0

Огромное вам спасибо, что он отлично работает. –

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