如何找到Java中包含对象的位置?

时间:2015-07-29 05:49:02

标签: java class dependencies

我有一个被宣布为的类。

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中这样做?有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如前所述,如果字段中没有显式引用,则Java中无法找到引用相关对象的对象。

如果您有这样的要求,最简单的方法就是在您的班级parent中添加StatusMessage字段。但请务必正确处理:

  1. 删除内部List子项的getter。不应允许状态消息之外的任何人操纵该列表。实际上,该列表是一个实现细节。

  2. 而是在您的班级中添加addChildaddToParent方法(或两者)。这些方法必须正确处理父子关系:

  3. 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字段(并确保正确设置)。