2013-09-05 2 views
1

루프와 기본 pojo 인스턴스화 코드가 있습니다. 정수기는 setter를 사용하여 속성을 설정 한 후 목록에 추가됩니다. 루프의 내부의 POJO 를 인스턴스화 및 루프의 내부의 POJO의 setter 메소드 를 사용하거나 POJO 루프 외부 를 인스턴스화하고 루프 내부의 POJO의 세터에게 를 사용에 대한 이유를 내 질문은, 무엇을 더하고 구체적으로. 나는 아래의 코드에서 pojo 변수를 언급하고있다. 당신이 모든 단계에 대해 서로 다른 객체를 사용하고 당신이 목록에 추가하기 때문에 HumanCoverageData hcd = new HumanCoverageData();java -pojo 루프 외부 또는 내부에서의 객체 인스턴스화?

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

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

에서 동일한 참조를 자신을 발견하고 싶어하지 않는 한 당신은 어쨌든 다시 초기화 끝날 것입니다 귀하의 HumanCoverageDataListsec.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); 
} 

가변 범위 here을 읽으십시오.

0

IMHO, 당신은 루프 내부의 POJO를 인스턴스화해야합니다. 외부 POJO를 인스턴스화하면 메모리 참조를 처리해야합니다.