2012-02-13 10 views
1

さて、私は、デフォルトで比較可能なデータ型を使用する単純なバイナリ検索ツリーを実装しようとしてきました。クラス内のすべての私の他の方法を無視Java - スタティックジェネリックタイプ(比較可能なものを使用)

、これは私はかなり標準だと思う私が持っている一般的なセットアップです:

public class BSTNode<E extends Comparable<? super E>>{ 
    E data; 
    BSTNode<E> left; 
    BSTNode<E> right; 
    //and I'm trying to define a static method(inside of the class) like this: 
    public static <E> String displayAscending(BSTNode<E> node){} 
} 

しかし、コンパイラはそれを好きではないです。さて、私はジェネリックタイプの新しさを感じていますので、これが何をしているのかを説明し、私の考え方が間違っているかどうかを理解するのに役立ちます。

E extends comparable したがって、基本的にComparableの拡張であるオブジェクトEです。基本的にEを表す抽象的な方法であるEの祖先である要素を持つComparableは、Comparableインターフェイスを使って他の要素と比較できます。

私の静的メソッドでは、BSTNodeを再帰的に渡そうとしています。私はなぜそれが動作していないの周りに私の頭を包むように見えることはできません。私は知っているBSTNode<?>それはうまく動作しますが、それは危険なようです。誰かが私に説明できたら、これがうまくいかないのですが、別の解決策を試してみることができます。

答えて

6

は、あなたがそれを行う場合、それは動作します。この

public static <E extends Comparable<? super E>> String displayAscending(BSTNode<E> node) 
+0

を試してみてください。 BSTNode と同じですが、なぜ私の方法でEを参照すると問題が出るのだろうと思います。私は渡されているオブジェクトが匹敵するものであることを確認したいと思います。 –

+0

また、私はこれを動作させました: 'public static > String displayAscending(BSTNode ノード)' 私は上記のコードが私に問題を与えている理由を知りたいと思います。 –

+0

'E 'に' displayAscending'に型境界が与えられていないので、 'BSTNode 'で使われるクラスの 'E extends Comparable 'を満たす必要があるので、問題があります。あなたが使っている文字( 'E' /' T' /なにか)は無関係なものなので、 'T'を使って変更したときにも動作します。 – mange

関連する問題