1

ループと基本的な pojo のインスタンス化を含むコードがあります。内部ループ pojo は、setter を使用して属性が設定された後にリストに追加されます。私の質問は、ループ内で pojo をインスタンス化し、ループで pojo のセッター メソッドを使用するか、ループで 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

それぞれが単一のオブジェクト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 に答える