2016-03-21 23 views
0

Şu bir sınav için okuyan ve ben Jenerik İkili Ağacıİkili Ağacı Jenerik Problemm

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(); 


} 

elimde arayüzüdür sıkışmış.

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); 
    } 


} 

Bu, İkili Ağacı Uygulamam. Kaçmaya çalıştığımda. Körük kodu Dize için değer yöntemi tanımlanmamış.

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()); 

Nerede yanlış yaptığımı anlamadım mı? Bunun için soyut bir yöntem oluşturmalı mıyım?

cevap

0

nedeni olduğunu burada bir düğüm dönmek isterken, String olduğunu getParent() ve getLeft() dönüş T.

BinaryTreeNode arabiriminizdeki kök, üst, sol ve sağa yaptığınız referanslar, T türüne sahiptir, ancak düğümün, düğümün kendisinde değil, başvurması gereken veri türüdür. T ile BinaryTreeNode<T> arasında bir değere sahip olmayan yöntemlerin dönüş değerlerinin ve parametrelerinin veri tipini değiştirin. Bu elbette, uygulama sınıfınız BinaryTreeNodeImpl'daki aynı bildirimleri etkileyecektir.

0

Sizin getParent() bir dönüş türüne sahiptir T; BinaryTreeNode'un bir üst öğesi (tercihen aynı türde) bir ikili ağaç düğümü olması gerektiğinden, bunun BinaryTreeNode<T> olmasını istediğiniz izleniminin altındayım.

Geçerli tasarım BinaryTreeNode ebeveyni bir String bir Integer bir kedi veya veya olabilir ve açıkçası dolayısıyla hata tanımlı değil bu konuda getValue(), aradığınız söyleyerek benzer.

Arayüzünüzdeki yöntem bildirimlerinde aynı türdeki değişikliklerin dönüş türlerinde yapın. Eğer hata vardı