unmodifiableList Modificável

5 respostas
S

Eu tive um probleminha aqui, e ele ocorria por que tínhamos uma lista não modificável que na verdade poderia ser modificada.

public static void main(String args[]) {
        List lst = new ArrayList();
        
        lst.add("Item 1");
        lst.add("Item 2");
        
        List unmodList = Collections.unmodifiableList(lst);
        
        System.out.println(unmodList.size());
        lst.remove(0);
        System.out.println(unmodList.size()); //ops.... um item foi removido
    }

"Collections.unmodifiableList" ele mantém a referência à lista original e não uma nova lista com os elementos da lista anterior.

Fica ai a dica, livre-se da lista original para ter realmente uma lista não modificável.

5 Respostas

maschiojv

… mals, post errado :smiley:

Marky.Vasconcelos

O método só não deixa mudar nada na unmodifiableList. A original continua sendo uma ArrayList.

S

Mais ou menos. A lista original pode ser modificada, mas uma modificação nela não deveria modificar a" unmodifiable" list. Elas deveriam ser independentes ao meu ver.

A implementação dessa lista deveria criar uma copia da lista e não utilizar a mesma referencia.

maschiojv
Ssalgado:
Mark_Ameba:
O método só não deixa mudar nada na unmodifiableList. A original continua sendo uma ArrayList.

Mais ou menos. A lista original pode ser modificada, mas uma modificação nela não deveria modificar a" unmodifiable" list. Elas deveriam ser independentes ao meu ver.

A implementação dessa lista deveria criar uma copia da lista e não utilizar a mesma referencia.

Você pode criar outra lista então, e tornar esta outra unmodifiable, como abaixo.

public static void main(String args[]) {

    List lst = new ArrayList();

    lst.add("Item 1");
    lst.add("Item 2");

    List unmodList = Collections.unmodifiableList(new ArrayList(lst));

    System.out.println(unmodList.size());
    lst.remove(0);
    System.out.println(unmodList.size());
  }
S
maschiojv:
Ssalgado:
Mark_Ameba:
O método só não deixa mudar nada na unmodifiableList. A original continua sendo uma ArrayList.

Mais ou menos. A lista original pode ser modificada, mas uma modificação nela não deveria modificar a" unmodifiable" list. Elas deveriam ser independentes ao meu ver.

A implementação dessa lista deveria criar uma copia da lista e não utilizar a mesma referencia.

Você pode criar outra lista então, e tornar esta outra unmodifiable, como abaixo.

public static void main(String args[]) {

    List lst = new ArrayList();

    lst.add("Item 1");
    lst.add("Item 2");

    List unmodList = Collections.unmodifiableList(new ArrayList(lst));

    System.out.println(unmodList.size());
    lst.remove(0);
    System.out.println(unmodList.size());
  }

Concordo. So abri esse tópico por que achei isso esquisito.

So acho que a própria implementação do método "unmodifiableList" deveria cuidar disso.

Criado 25 de maio de 2009
Ultima resposta 25 de mai. de 2009
Respostas 5
Participantes 3