在 java 中永久更改节点的内容
Permanently changing a node's contents in java
假设我有一个存储 HashSet<String
> 的节点(因此它是该节点的一个实例变量)。我有一个 getter 方法可以让我检索 HashSet
,但现在我真的需要更新它。这可能吗?如果没有,什么是好的解决方法?我已经这样实现了我的树:
public class CTree implements Serializable {
public CRoot initialCommit;
public CTree(int id, CNode parent, HashSet<String> files) {
root = new CNode(id, parent, files, inheritedFiles);
}
public static class CNode implements Serializable {
int nodeID;
CNode parent;
HashSet<String> toCommit;
public CNode(int id, CNode parent, HashSet<String> files) {
nodeID = id;
this.parent = parent;
toCommit = files;
}
public HashSet<String> getFiles() {
return this.toCommit;
}
public CommitNode getParent() {
return this.parent;
}
public int getID() {
return this.nodeID;
}
}
}
当您获取节点的 HashSet
时,您获取的不是 HashSet
的副本,而是获取节点中同一对象的引用。所以你可以只更新它,节点的内容也会更新,因为它们指向同一个对象。
您可能对返回原语感到困惑。在这种情况下,值被复制并且修改它对原始图元没有影响。
假设我有一个存储 HashSet<String
> 的节点(因此它是该节点的一个实例变量)。我有一个 getter 方法可以让我检索 HashSet
,但现在我真的需要更新它。这可能吗?如果没有,什么是好的解决方法?我已经这样实现了我的树:
public class CTree implements Serializable {
public CRoot initialCommit;
public CTree(int id, CNode parent, HashSet<String> files) {
root = new CNode(id, parent, files, inheritedFiles);
}
public static class CNode implements Serializable {
int nodeID;
CNode parent;
HashSet<String> toCommit;
public CNode(int id, CNode parent, HashSet<String> files) {
nodeID = id;
this.parent = parent;
toCommit = files;
}
public HashSet<String> getFiles() {
return this.toCommit;
}
public CommitNode getParent() {
return this.parent;
}
public int getID() {
return this.nodeID;
}
}
}
当您获取节点的 HashSet
时,您获取的不是 HashSet
的副本,而是获取节点中同一对象的引用。所以你可以只更新它,节点的内容也会更新,因为它们指向同一个对象。
您可能对返回原语感到困惑。在这种情况下,值被复制并且修改它对原始图元没有影响。