1

我有一些带有循环和基本 pojo 实例化的代码。在通过使用设置器设置其属性后,循环 pojo 被添加到列表中。我的问题是,关于在循环内实例化 pojo并在循环内使用 pojo 的 setter 方法或在循环外实例化 pojo循环使用 pojo 的设置器,什么更好,为什么?我指的是下面代码中的 pojo 变量。HumanCoverageData hcd = new HumanCoverageData();

    HumanCoverage hc = new HumanCoverage();
    List<HumanCoverageData> HumanCoverageDataList = new ArrayList<HumanCoverageData>();
    // Coverage is a static nested class not shown in the code.
    for (Coverage c : sec.getCoverage()){

        HumanCoverageData hcd = new HumanCoverageData();
         hcd.setFirstName(c.getUser_name().split(",")[0]); 
         hcd.setLastName(c.getUser_name().split(",")[1]); 
         hcd.setPhoneNumber(c.getPhone_number()); 
         hcd.setRoleCode(c.getRolecode()); 
         hcd.setRoleDescription(null); 
         hcd.setUserId(c.getUser_id()); 

         HumanCoverageDataList.add(hcd);
    }

    hc.setHumanCoverageList(HumanCoverageDataList);
    co.setCoverage(hc);
4

2 回答 2

0

恕我直言,您必须在循环内实例化 POJO,因为您为每个步骤使用不同的对象,然后添加到您的列表中。如果在外部实例化 POJO,则必须注意内存引用

于 2013-09-05T16:07:23.913 回答
0

在我看来,每个都HumanCoverageData依赖于一个Coverage对象。因此,HumanCoverageData在它之外实例化是没有意义的。

无论如何,您最终都会重新初始化它,除非您想在列表中找到 N 次相同的引用

HumanCoverageData hcd = new HumanCoverageData();
for (Coverage c : sec.getCoverage()){

     hcd.setFirstName(c.getUser_name().split(",")[0]); 
     hcd.setLastName(c.getUser_name().split(",")[1]); 
     hcd.setPhoneNumber(c.getPhone_number()); 
     hcd.setRoleCode(c.getRolecode()); 
     hcd.setRoleDescription(null); 
     hcd.setUserId(c.getUser_id()); 

     HumanCoverageDataList.add(hcd);
}

HumanCoverageDataList将包含sec.getConverage().size()多次相同的对象/相同的引用。这是因为您只调用new了一次。当for循环和设置器被执行时,你所做的就是覆盖之前的值。

相反hcd,如果你想在循环之后使用它,你可以在 for 循环之外声明,即。在循环范围之外

HumanCoverageData hcd = null;
for (Coverage c : sec.getCoverage()){
     hcd = new HumanCoverageData();
     hcd.setFirstName(c.getUser_name().split(",")[0]); 
     hcd.setLastName(c.getUser_name().split(",")[1]); 
     hcd.setPhoneNumber(c.getPhone_number()); 
     hcd.setRoleCode(c.getRolecode()); 
     hcd.setRoleDescription(null); 
     hcd.setUserId(c.getUser_id()); 

     HumanCoverageDataList.add(hcd);
}

在此处阅读变量范围。

于 2013-09-05T16:07:36.473 回答