Java 泛型树和泛型节点
我想实现一个通用树节点和一个通用树。我在stackoverflow和其他地方看到了一些例子,但不能完全理解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
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的树。如果它们可以是任何类型,那么允许树