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以便稍后调用它们吗? (假设你可以知道在什么时候打电话给谁)
答案 0 :(得分:0)
我建议最好在需要时使用Apache BeanUtils.PropertyUtils根据路径调用setter。下面列出了一些使用方法:
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)
答案 1 :(得分: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 */);
}
}
这些延迟的setter Runnable
可以添加到您在稍后初始化期间循环的集合中。但我仍然认为你可以通过简化你的设计来避免这种方法。