2013-09-05 2 views
1

У меня есть код с петлей и базовое создание экземпляра pojo. Int he loop pojo добавляется в список после того, как его атрибуты устанавливаются с помощью seters. Мой вопрос, что лучше и почему в отношении инстанцирования POJO внутри цикла и использовать методы сеттера в Pojo в внутри петле или экземпляр 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); 
} 

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

читать на переменном объеме here.

0

ИМХО, вы должны создать экземпляр POJO внутри цикла, потому что вы используете различные объекты для каждого шага, а затем добавить в свой список. Если вы создаете экземпляр POJO на улице, вы должны помнить об образе памяти

Смежные вопросы