0
 public class TopLevelObject{

    List<SecondLevelObject> secondLevelObjects;
    Long field;

}

public class SecondLevelObject{
    List<ThirdLevelObject> thirdLevelObjects;
    Long field;

}

public class ThirdLevelObject{
     Long field1;
     Long field2;

}

我们有一个 TopLevelObject,它包含一个 SecondLevelObjects 列表,所有这些都包含 ThirdLevelObjects 列表

我们需要通过迭代初始化这个结构的一些字段,并推迟初始化其他的,但避免再次迭代

那么是否可以将引用/路径存储到该字段的设置器以便稍后调用它们?(假设您可以知道何时调用哪个 setter)

4

2 回答 2

0

我会建议更好地使用Apache BeanUtils.PropertyUtils在需要时根据路径调用设置器。一些使用方法如下:

PropertyUtils.setProperty(Object bean, String propertyName, Object value)  
PropertyUtils.setNestedProperty(Object bean, String propertyName, Object value)   
PropertyUtils.setIndexedProperty(Object bean, String propertyName, int index, 
                                 Object value) 
PropertyUtils.setIndexedProperty(Object bean, String propertyName, Object value)
于 2012-10-13T15:06:21.623 回答
0

首先,这只是性能问题吗?因为如果是这样,请在测量完后再回来。

其次,检查你是不是太聪明了。阅读有关内部平台效应的信息。你真的需要手动滚动这个惰性初始化代码,还是可以使用 JPA 或其他东西?

如果您仍然确定,您可以使用一个自定义对象来延迟这样的设置

// [some code that is about to set the property on thirdLevelObject
Runnable deferredSetter = new Runnable() {
    public void run() {
         thirdLevelObject.setFoo(/* wherever the value for foo comes from later */);
    }
} 

这些延迟Runnable的 setter 可以添加到您将在以后的初始化过程中循环的集合中。但我仍然认为您可以通过简化设计来避免这种方法。

于 2012-10-13T15:28:24.647 回答