2

是否可以通过任意级别的其他对象引用来确定对象“O”是否被对象“R”(根)引用?

例子:

public class Car {
    public Driver driver;
}

public class Driver {
    public License license;
}

public class License {
    public ID id;
}

public class ID {
}

使用此设置,参考是“汽车 -> 驾驶员 -> 执照 -> 身份证”。

现在,当我有'Car'(C)的实例和'ID'(I)的实例时,我想确定我是否被C引用(不是直接引用,而是通过任何级别的其他引用)。

一种解决方案是递归地使用反射并“搜索”实例“ID”,搜索根为“汽车”。如果算法从“Car”开始并“沿着引用树向下”并找到“ID”实例,这意味着“ID”被“Car”间接引用。(只是一个递归算法,如 XML 序列化程序,访问对象层次结构)。

这个解决方案的缺点是,找到答案需要相当长的时间,因为在最坏的情况下,整个对象层次结构(必须从“汽车”开始访问(当然,对象树可能很复杂))。

我现在的具体问题是:是否可以反过来做,从“ID”到根“Car”,就像父类一样,但使用具体的对象引用?

伪代码如下所示:

parent = ID.getParent()
while ( parent != Car ) {
    parent = parent.getParent()
    if ( parent == null )
        break;
}

(请注意,伪代码适用于对象和引用,而不是父类)。

当没有手动设置类成员引用时,我不确定 Java Reflection 是否能够做到这一点,或者如果没有这样的 child->parent 引用信息。

我的目标如下:

A 有一个包含很多类的复杂域模型。如果编写了这些类中任何位置的一个类属性(例如,'car.setDriver(...)),我必须序列化整个域模型(“保存文档”)。为了检测属性更改(请注意,我不能在我的上下文中使用 AOP)我在域类的那些 setter 方法中使用我自己的 PropertyChangeSupport,并将 PropertyChangeEvents 推送到 EventBus。现在我可以检测更改并相应地保存域模型。

仍然存在一个问题:我必须确定属性更改是否属于我的根对象(域模型的根对象)引用的 cartain 对象实例。

非常感谢你的帮助!

4

0 回答 0