1

ジェネリック TreeNode とジェネリック ツリーを実装したいと思います。stackoverflow や他の場所でいくつかの例を見てきましたが、完全には理解できませんでした。

public interface Node<K, V>
{
    K getId();         
    V getData();
    K getParentId();  
    void addChild(Node<K, V> child);
    List<Node<K, V>> getChildren();
}

public class Tree<K, V> 
{
   private Node<K, V> root;
   public void loadData(Map<K, V> data)
   {
         // by figuring out the root node from map, populate tree
         // root node is the one with parentId as null
         // and the logic follows. Simple level order insertion 
   } 
}

上記のコードは私の目的を果たしていますが、これを達成するためのより良い方法があるかどうかを知りたいです。

Tree を次のように宣言します。

public class Tree<T extends Node<?, ?> 
{
   private T root;
   public void loadData(Map<K, V> data) 
   {
         // by figuring out the root node from map, populate tree
         // root node is the one with parentId as null
         // and the logic follows. Simple level order insertion 
   } 
}

上記の場合、データ ロード メソッドはどこに配置すればよいですか? Utilクラス?

基本的に、ジェネリックである型よりもジェネリックなクラスを作成するときに従うべき原則を理解したいと思います。

ありがとう。

4

1 に答える 1

0

ホールツリータイプのジェネリックが必要な場合、これが私が理解できる唯一のオプションでした。

    public class Tree<K extends Object, V extends Object, T extends Node<K, V>>
    {
       private T root;
       public void loadData(Map<K, V> data) 
       {
             // ...
       } 
    }

私があなたの主張を理解したかどうかはわかりませんが、あなたのニーズが何であるかという質問からは本当に明確ではありません。したがって、これが無意味であるか、あなたが必要としているものと正確に一致しない場合は、私に反対票を投じる前に知らせてください(:

よろしく。

于 2012-11-07T17:59:58.570 に答える