基本上我正在尝试实现这样的东西,其中伙伴节点是“type1”,客户端节点是“type2”,用户节点是“type3”。并且每个节点都可以有多个子节点。因此 Partner1 下可以有任意数量的客户端节点,类似地,客户端节点下可以有任意数量的用户。
我已经开始实现了,但我现在卡住了。我写的代码如下。
public class ClientProperty {
public class Root{} //NodeType1
public class Partner{ //NodeType2
public String partner_id;
public String partner_name;
public int partner_node_id;
public Partner(String partner_id,String partner_name,int partner_node_id){
this.partner_id = partner_id;
this.partner_name = partner_name;
this.partner_node_id = partner_node_id;
}
}
public class Clients{ //NodeType3
public String client_name;
public String client_id;
public int client_node_id;
public Map<Enum,List<Enum>> clientproperty = new HashMap<Enum,List<Enum>>();
public Clients(String client_name, String client_id, int client_node_id,Map<Enum,List<Enum>> clientproperty){
this.client_name = client_name;
this.client_id = client_id;
this.client_node_id = client_node_id;
this.clientproperty = clientproperty;
}
}
public class Users{ //NodeType4
public String user_name;
public String user_id;
public int user_node_id;
public Users(String user_id,String user_name, int user_node_id){
this.user_id = user_id;
this.user_name = user_name;
this.user_node_id = user_node_id;
}
}
public class Node{
Node next;
Object nodes;
public Node(){
next = null;
}
public Node(Object nodes, Node next){
this.nodes = nodes;
this.next = next;
}
}
}
如果需要一些见解,请告诉我
最佳答案
首先是一些更不具体的事情:
您想阅读有关数据封装的内容。将所有 public 字段都放在你的类中是完全错误的。你实际上想尽可能地隐藏这些信息。
然后您想阅读java 编码风格约定;因为您违反了其中的很多(当您向更有经验的 Java 编码人员展示您的代码时,这根本无济于事)。
最后,最重要的是:您想阅读很多关于OO 设计 的一般知识(我推荐 Robert Martin 的“敏捷实践”;有一个免费的 PDF 版本的“C# 版本”那本书):
首先是
a) 成为客户/用户是“不同的责任”
b) 是图中的某个元素
换句话说:您在类(class)中放置了太多“角色”。
意思:你想引入各种抽象。例如:
interface GraphNode<N, C extends GraphNode> {
N getNodeContent();
List<C> getChildrenNodes();
}
现在你可以表达:任何“节点”确实有一些内容(可以是用户或客户端或任何对象);它有一个子列表(或集合),它们也是“节点”。
关于java - 如何制作具有多种类型节点的树并且每个节点可以在java中有多个子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37741967/