我有一些循环和基本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);
答案 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。