2016-03-21 8 views
0

В настоящее время учится на экзамен, и я застрял на Generic Binary TreeBinary Tree Generic проблемм

public interface BinaryTreeNode <T>{ 

    public void setParent(T binaryTreeNodeImpl); 
    public void setLeft(T left); 

    public void setRight(T right); 
    public T getRoot() ; 
    public T getParent(); 
    public void setValue(T string); 
    public T getLeft(); 


} 

Это мой интерфейс.

public class BinaryTreeNodeImpl <T> implements BinaryTreeNode <T>{ 

    public T value; 
    private T Root; 
    private T right; 
    private T parent; 
    private T left; 




    public void setRight(T right) { 
     this.right = right; 
     ((BinaryTreeNode<T>) right).setParent((T) this); 


    } 
    public T getRoot() { 
     return (T) Root; 
    } 
     public void setValue(T value) { 
      this.value=value; 

     } 
    public T getValue() { 
     return value; 
    } 

    public T getParent() { 
     return parent; 
    } 
    public void setParent(T binaryTreeNodeImpl) { 
     parent= binaryTreeNodeImpl; 

    } 
    public T getRight() { 
     return right; 
    } 

    public T getLeft() { 
     return left; 
    } 


    public void setLeft(T left) { 
     this.left = left; 
     ( (BinaryTreeNode<T>) left).setParent((T) this); 
    } 


} 

Это мое двоичное дерево. Реализация. Когда я пытаюсь запустить. Bellow code У меня есть метод Value для String для Undefined.

BinaryTreeNode<String> root = new BinaryTreeNodeImpl<String>(); 
     root.setValue("abc"); 
     BinaryTreeNode<String> left = new BinaryTreeNodeImpl<String>(); 
     left.setValue("xyz"); 
     root.setLeft(left); 
     System.out.println(left.getParent().getValue()); 
     System.out.println(root.getLeft().getValue()); 

Я не понял, где я ошибся? Должен ли я создавать абстрактные методы для этого?

ответ

0

Причина, по которой была ошибка в том, что getParent() и getLeft() возвращение T, который String, когда вы имели в виду, чтобы вернуть узел здесь.

Ваши ссылки на корень, родительский, левый и правый в вашем интерфейсе BinaryTreeNode имеют тип T, но это тот тип данных, который должен обрабатывать узел, а не сам узел. Измените тип данных возвращаемых значений и параметров методов, которые не имеют ничего общего со значением от T до BinaryTreeNode<T>. Это, конечно, повлияет на те же декларации в вашем классе реализации BinaryTreeNodeImpl.

0

getParent() имеет вид возврата T; У меня создается впечатление, что вы хотите, чтобы это было BinaryTreeNode<T>, поскольку родительский элемент BinaryTreeNode должен быть двоичным узлом дерева (предпочтительно того же типа).

Ваш текущий дизайн сродни тому, что родитель BinaryTreeNode может быть String или Integer или кошка, и вы вызываете getValue() на том, что, очевидно, не определен, следовательно, ошибка.

Внесите те же изменения в типы возвращаемого значения в объявлениях метода в вашем интерфейсе.