我有一个被宣布为的类。
public class StatusMessage {
private Status status;
private String message;
private Throwable throwable;
private List<StatusMessage> children;
getters ; setters;
}
这使我能够通过添加子项来拥有类似于StatusMessages结构的无穷树。
添加子项的示例代码。
StatusMessage parent =new StatusMessage(status,message);
parent.getChildren().add(new StatusMessage(status,message));
parent.getChildren().add(new StatusMessage(status,message));
parent.getChildren().add(new StatusMessage(status,message));
StatusMessage child1 =new StatusMessage(status,message);
parent.getChildren().add(child1);
StatusMessage child1_1 =new StatusMessage(status,message);
child1.getChildren().add(child1_1);
....
有没有什么方法可以让我发现child1是child1_1的父级,同样从最低级到最高级?
我希望通过不在子项中添加父项的引用来实现此目的。有没有办法在Java中这样做?有什么建议吗?
答案 0 :(得分:1)
如前所述,如果字段中没有显式引用,则Java中无法找到引用相关对象的对象。
如果您有这样的要求,最简单的方法就是在您的班级parent
中添加StatusMessage
字段。但请务必正确处理:
删除内部List
子项的getter。不应允许状态消息之外的任何人操纵该列表。实际上,该列表是一个实现细节。
而是在您的班级中添加addChild
或addToParent
方法(或两者)。这些方法必须正确处理父子关系:
public void addChild(StatusMessage child) {
if (child.parent != null) {
child.parent.children.remove(child);
}
child.parent = this;
children.add(child);
}
public void addToParent(StatusMessage parent) {
if (this.parent != null) {
this.parent.children.remove(this);
}
this.parent = parent;
this.parent.children.add(this);
}
答案 1 :(得分:0)
不,您无法找出哪些对象引用特定对象。
您可能只想添加parent
字段(并确保正确设置)。