2016-06-17 15 views
1

内にない私は、次の二分探索木をしましたが、それは動作しません...ジェネリックバイナリ検索ツリーのJava型引数が範囲

class Tree<ContentType extends Comparable<ContentType>>{ 


    Node node; 
    public Tree(){ 
    node = null; 
    } 
    public Tree(ContentType pContent){ 
    node = new Node<ContentType>(pContent); 
    } 
    public Tree(ContentType pContent, Tree pLeftTree, Tree pRightTree){ 
    node = new Node(pContent); 
    node.setLeftTree(pLeftTree); 
    node.setRightTree(pRightTree); 
    } 
    public boolean isEmpty(){ 
    ... 
    } 

    public void insert(ContentType pContent){ 
    ... 
    } 

    public ContentType search(ContentType pContent){ 
    ... 
    } 

    public void delete(ContentType pContent){ 
    ... 
    } 
    public ContentType getContent(){ 
    ... 
    } 


...  

    private class Node<ContentType>{ 
     Tree left = null; 
     Tree right = null; 
     ContentType content = null; 


     public Node(ContentType pContent){ 
      content=pContent; 
      left = new Tree(); 
      right = new Tree(); 

     } 

     ... 

    } 


} 

を助ける必要が今では私に

type-variable Content-Type#1 is not within bounds of type-variable Content-Type#2. 

を伝えますすべてのおかげで

+0

いつどこで例外が表示されていますか? –

+0

コンソールで表示されるプログラムをコンパイルするとき –

+1

'public tree(ContentType pContent、Tree pLeftTree、Tree pRightTree)'はおそらく 'public tree(ContentType pContent、Tree pLeftTree、Tree pRightTree)'であるべきです。生の型の使用に関する警告はありませんでしたか? - それ以外にも、 'ContentType'がクラス名であると誤解される可能性があるので、ジェネリックのためにもっと別の名前を使うことをお勧めします。 – Thomas

答えて

0

ここに完全に固定されたクラスファイルがあります - 型のすべてのインスタンスを宣言するときにジェネリック型を指定してください!

class Tree<ContentType extends Comparable<ContentType>>{ 

    // here 
    Node<ContentType> node; 

    public Tree(){ 
     node = null; 
    } 

    public Tree(ContentType pContent){ 
     node = new Node<ContentType>(pContent); 
    } 

    // each time Tree is used, it should be typed! 
    public Tree(ContentType pContent, Tree<ContentType> pLeftTree, Tree<ContentType> pRightTree){ 
     // same with Node! 
     node = new Node<ContentType>(pContent); 
     node.setLeftTree(pLeftTree); 
     node.setRightTree(pRightTree); 
    } 

    //Node needs to be typed with the exact same type as Tree! 
    private class Node<ContentType extends Comparable<ContentType>>{ 
     // Typed Tree! 
     Tree<ContentType> left = null; 
     Tree<ContentType> right = null; 
     ContentType content = null; 


     public Node(ContentType pContent){ 
      content=pContent; 
      left = new Tree<ContentType>(); 
      right = new Tree<ContentType>(); 
     } 

     public void setLeftTree(Tree<ContentType> tree) { 
      left = tree; 
     } 

     public void setRightTree(Tree<ContentType> tree) { 
      right = tree; 
     } 
    } 
} 

そして、W/O警告をコンパイルする:

~ bfung$ javac -version 
javac 1.8.0_40 
~ bfung$ javac Tree.java 
~ bfung$ 
関連する問題