2016-07-30 24 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

非常感谢你,它的工作完美。 –