2016-06-17 4 views
1

я следующее бинарное дерево поиска, но это не работает ... нужно помочьGeneric Binary Search Tree 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; 
     } 
    } 
} 

И компилировать без предупреждения:

~ bfung$ javac -version 
javac 1.8.0_40 
~ bfung$ javac Tree.java 
~ bfung$