0

こんにちは、Java コードに問題があります...

問題は、私のリストの add(e) に​​あります。

List<Sms> listSms = new ArrayList<Sms>();
   for(int i = 0; i < grupo.size(); i++){
        Grupo group = new GrupoDao().carregaById(grupo.get(i),usuario.logado);
        for(int j = 0; j < group.getContatos().size(); j++){
            sms.setNumber(group.getContatos().get(j).getNumber());
            listSms.add(sms);//Here he override all the list sms.number to last one added
        }
    }

誰でも私を助けることができますか?

4

2 に答える 2

11

リストに追加するのはインスタンスではなく、インスタンスへの参照です。したがって、最後に、 内のすべての参照listは同じインスタンスを参照しています。つまり、参照を使用してインスタンスに加えた変更は、以前にリストに追加したすべての参照に反映されます。

Sms解決策は、リストに参照を追加するたびに新しいインスタンスを作成することです。forループでそれをしなければならないこと。

for(int j = 0; j < group.getContatos().size(); j++){
    Sms sms = new Sms();
    sms.setNumber(group.getContatos().get(j).getNumber());
    listSms.add(sms);//Here he override all the list sms.number to last one added
}
于 2013-02-22T19:04:18.480 に答える
1

同じオブジェクト/インスタンスを何度も追加しています。次のように、新しいインスタンスをリストに追加する必要があります。

Sms x=new Sms();
x.setNumber......
listSms.add(x);
于 2013-02-22T19:06:46.820 に答える