java -pojo循环或内部的对象实例化?

时间:2013-09-05 16:04:07

标签: java

我有一些循环和基本pojo实例的代码。 Int he loop pojo在通过使用setter设置其属性后添加到列表中。 我的问题是,有什么更好以及为什么在实例化循环中的pojo 内部并使用pojo的setter方法循环中或实例化pojo 循环之外,使用pojo的setter 循环中是特定的。我指的是下面代码中的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);

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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循环和setter时,您所做的只是覆盖以前的值。

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

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);
}

阅读变量范围here