有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java存储setter方法的路径,以便以后可以调用它

 public class TopLevelObject{

    List<SecondLevelObject> secondLevelObjects;
    Long field;

}

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

}

public class ThirdLevelObject{
     Long field1;
     Long field2;

}

我们有一个TopLevelObject,它包含一个SecondLevelObject列表,所有这些对象都包含一个ThirdlevelObject列表

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

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


共 (2) 个答案

  1. # 1 楼答案

    我建议在需要时使用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)
    
  2. # 2 楼答案

    首先,这仅仅是性能问题吗?因为如果是这样的话,等你量好了再来

    第二,检查你是否太聪明。了解内部平台效应。你真的需要手工编写这个惰性的初始化代码吗,或者你能使用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 */);
        }
    } 
    

    这些延迟的setterRunnable可以添加到一个集合中,您可以在稍后的初始化过程中循环使用该集合。但我仍然认为,通过简化设计,您可以避免这种方法