2017-01-16 6 views
0

Es gibt eine Schnittstelle BSTNode, um einen speziellen Baum zu erstellen.Wie schreibt man eine generische Klasse?

public interface BSTNode<K extends Comparable<K>, V> { 
    /** 
    * Recovers the value stored in the node 
    * @return the value stored in the node 
    */ 
    public V getValue(); 

    /** 
    * Sets the value stored in the node 
    * @param value the value to store in the node 
    */ 
    public void setValue(V value); 

    /** 
    * Recovers the key stored in the node 
    * @return the key stored in the node 
    */ 
    public K getKey(); 

    /** 
    * Sets the key stored in the node 
    * @param key the key to store in the node 
    */ 
    public void setKey(K key); 

    /** 
    * Recover the parent stored of the current node 
    * @return the parent of the current node 
    */ 
    public BSTNode<K, V> getParent(); 

    /** 
    * Set the parent of the current node 
    * @param parent to set for the current node 
    */ 
    public void setParent(BSTNode<K, V> parent); 
    } 

Allerdings, wenn ich diese Schnittstelle implementieren ich mit mehreren Problemen:

public abstract class BinarySearchTreeNode implements BSTNode { 

    private Object value; 
    private Object key; 
    private BinarySearchTreeNode parent; 
    private BinarySearchTreeNode left; 
    private BinarySearchTreeNode right; 

    public BinarySearchTreeNode(){ 
     this.value=null; 
     this.key=null; 
     this.parent=null; 
     this.left=null; 
     this.right=null; 
    } 

    public BinarySearchTreeNode(Object value, Object key, BinarySearchTreeNode parent, BinarySearchTreeNode left, BinarySearchTreeNode right){ 
     this.value=value; 
     this.key=key; 
     this.parent=parent; 
     this.left=left; 
     this.right=right; 
    } 


    public Object getValue() { 
     return this.value; 
    } 


    public void setValue(Object value) { 

    } 


    public Comparable getKey() { 
     return null; 
    } 


    public void setKey(Comparable key) { 
    } 


    public BSTNode<K, V> getParent() { 
    } 


    public void setParent(BSTNode<K, V> parent); 

Es hat mich immer wieder daran erinnert, dass V cannot be resolved to a type - K cannot be resolved to a type

Kann mir jemand sagen, den richtigen Weg, um diese Schnittstelle zu implementieren?

Antwort

1

Ja, ersetzen Sie die Parameter V und K mit Ihren eigenen Typen in der Unterklasse. Überprüfen Sie für eine Beispielinstanz das folgende Codesegment.

public interface Transformer<S, T> { 
    T transform(S source); 

} 

public class DocumentToStudentTransformer implements Transformer<Document, BaseStudentDTO> { 

    private static final String ID = "_id"; 
    public static final String STREAM = "stream"; 
    public static final String GPA = "gpa"; 
    public static final String AGE = "age"; 
    public static final String NAME = "name"; 

    @Override 
    public StudentDTO transform(Document source) { 
     return new StudentDTO(source.getString(NAME), source.getInteger(AGE), source.getDouble(GPA), 
       source.getString(STREAM), ((ObjectId) source.get(ID)).toString()); 
    } 
} 

Hoffe das hilft. Glückliche Kodierung!

+0

Danke für Ihre ausführliche Antwort! Welchen Typ sollte ich verwenden, um "K" zu ersetzen? Ich habe einen Komparator ausprobiert, aber es funktioniert überhaupt nicht. –

+0

Sie sollten das wissen, da Sie derjenige sind, der den Schnittstellenvertrag definiert hat. Es scheint, dass K den Schlüssel bedeutet, der in dem Knoten gespeichert ist, der vergleichbar implementiert, während V den Wert bedeutet, den Sie in dem Baumknoten speichern. Sie sollten diese Strukturen im Voraus definiert haben. Bitte lesen Sie einen Artikel über Typparameter und Generics in Java, der nicht schwer ist. –

Verwandte Themen