Ошибки в том, что вы обращаетесь к нестатическому переменному экземпляру внутри статического метода
Всех поля членов интерфейса являются по умолчанию public
, static
и final
.
Поскольку внутренний интерфейс static
по умолчанию, вы не можете обращаться к T
от static
полях или методах.
T фактически связан с экземпляром класса, если это было связано с static
поле или метод, который связан с классом, то это не имело бы никакого смысла
Вы можете создать один класс с информация:
public class MyTreeNode<T>{
public T data = null;
public MyTreeNode parent = null;
public MyTreeNode(T data) {
this.data = data;
}
public void addChild(MyTreeNode child) {
child.setParent(this);
this.children.add(child);
}
public void addChild(T data) {
MyTreeNode<T> newChild = new MyTreeNode<>(data);
newChild.setParent(this);
children.add(newChild);
}
public void addChildren(List<MyTreeNode> children) {
for(MyTreeNode t : children) {
t.setParent(this);
}
this.children.addAll(children);
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
и основные примеры:
MyTreeNode<String> root = new MyTreeNode<>("Root");
MyTreeNode<String> child1 = new MyTreeNode<>("Child1");
child1.addChild("Grandchild1");
child1.addChild("Grandchild2");
MyTreeNode<String> child2 = new MyTreeNode<>("Child2");
child2.addChild("Grandchild3");
root.addChild(child1);
root.addChild(child2);
root.addChild("Child3");
root.addChildren(Arrays.asList(
new MyTreeNode<>("Child4"),
new MyTreeNode<>("Child5"),
new MyTreeNode<>("Child6")
));
for(MyTreeNode node : root.getChildren()) {
System.out.println(node.getData());
}
Ссылка: here и here
Спасибо, это было полезно! –