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 回答