Java 泛型树和泛型节点

Java 泛型树和泛型节点,java,generics,Java,Generics,我想实现一个通用树节点和一个通用树。我在stackoverflow和其他地方看到了一些例子,但不能完全理解 public interface Node<K, V> { K getId(); V getData(); K getParentId(); void addChild(Node<K, V> child); List<Node<K, V>> getChildren(); } pu

我想实现一个通用树节点和一个通用树。我在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 
   } 
}
虽然上面的代码符合我的目的,但我想了解是否有更好的方法来实现这一点

比如把树声明为

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 
   } 
}
在上述情况下,我的数据加载方法应该驻留在哪里?什么课

基本上,我想了解在创建泛型类而不是泛型类时要遵循的原则


谢谢。

如果您需要洞树类型泛型,这是我唯一能找到的选项:

    public class Tree<K extends Object, V extends Object, T extends Node<K, V>>
    {
       private T root;
       public void loadData(Map<K, V> data) 
       {
             // ...
       } 
    }
我不确定我是否明白你的意思,从这个问题上看,你的需要是什么并不清楚,因此,如果这是毫无意义的,或者不完全是你需要的,请在否决我之前让我知道:


问候。

您的第二个代码如何工作?你的类型只是T中的泛型-那么K和V来自哪里?我认为你的类型很好。除非您希望允许任何树,并具有类似接口树的内容,并定义一个类NodeTree implements Tree,这正是我想要的。然而,由于我发布这篇文章才一天,我想再等几天,看看是否有更好的答案。这个问题非常令人困惑。类是类型。如前所述,上一个树代码示例将节点类型绑定为通配符,但有一个loadData方法,该方法描述了“K”和“V”,但没有定义它们的含义。就“一般原则”而言,只需仔细思考这个类的功能。如果您的树应该只包含相同K和V的节点,那么您的树应该被定义为带有loadData方法Map data的树。如果它们可以是任何类型,那么允许树