Java 代码分析:CustomTreeNode 类构造函数的潜在问题及修复
Java 代码分析:CustomTreeNode 类构造函数的潜在问题及修复
以下代码定义了一个名为 CustomTreeNode 的类,用于表示树形结构中的节点。
public class CustomTreeNode {
private int node_id;
private int parent_id;
private String node_name;
private ArrayList<CustomTreeNode> childrenNodes;
public CustomTreeNode(int node_id, int parent_id, String node_name, ArrayList childrenNodes) {
this.node_id = node_id;
this.parent_id = parent_id;
this.node_name = node_name;
this.childrenNodes = childrenNodes;
}
}
这段代码存在以下问题:
-
构造函数的参数列表中,
ArrayList childrenNodes应该明确指定泛型类型,例如ArrayList<CustomTreeNode> childrenNodes,以确保只能存储CustomTreeNode类型的对象。如果不指定泛型类型,
ArrayList可以存储任何类型的对象,这会导致类型错误和潜在的运行时异常。 -
在构造函数体中,
this.childrenNodes = childrenNodes;存在潜在的问题。由于 Java 中的引用传递,这将直接将参数childrenNodes的引用赋值给成员变量childrenNodes,这可能导致意外的修改。例如,如果外部代码修改了传入构造函数的
childrenNodes列表,那么CustomTreeNode对象中的childrenNodes列表也会被修改,这可能不是预期的行为。
为了避免这种情况,可以使用 new ArrayList<>(childrenNodes) 来创建一个新的 ArrayList 实例,并将参数中的元素复制到新的列表中。
以下是修正后的代码:
public class CustomTreeNode {
private int node_id;
private int parent_id;
private String node_name;
private ArrayList<CustomTreeNode> childrenNodes;
public CustomTreeNode(int node_id, int parent_id, String node_name, ArrayList<CustomTreeNode> childrenNodes) {
this.node_id = node_id;
this.parent_id = parent_id;
this.node_name = node_name;
this.childrenNodes = new ArrayList<>(childrenNodes);
}
}
修复后的代码会明确指定 ArrayList 的泛型类型,并使用新的 ArrayList 实例来存储参数中的元素,以避免意外修改。
通过这些修正,我们能够确保 CustomTreeNode 类构造函数的安全性和可维护性。
原文地址: https://www.cveoy.top/t/topic/jRr 著作权归作者所有。请勿转载和采集!