Primeiro, dê um pedaço de código:
classe pública ASLISTMETHOD {public static void main (string [] args) {string sentença = "eu te amo"; List <string> words = Arrays.asList (sentença.split ("")); for (int i = 0; i <words.size ();) {if (words.get (i) .equals ("amor")) {words.remove (i); continuar; } i ++; } System.out.println (palavras); }Em seguida, execute este código e, finalmente, foi relatado um erro:
Exceção no thread "main" java.lang.unsupportEdOperationException em java.util.abstractList.remove (abstractList.java:161) em list.aslistmethod.main (aslistmethod.java:12)
A parte inferior da lista de cadeia de erros.ASLISTMETHOD.MAIN (ASLISTMETHOD.Java:12) é sobre essa linha de código:
words.remove (i);
Esse erro me deixou confuso porque olhei para esse código antes de escrever este código. O método de matriz.asList retorna uma lista de Array. Por que não posso removê -lo? Em seguida, devido a um pequeno erro, o resultado do Arrays.asList foi designado para java.util.arraylist, mas a tarefa falhou. Eu imediatamente me senti como um gato cego bateu em um rato morto. Em seguida, siga o método Arrays.asList e descobri que este Arraylist não é o mesmo ArrayList. Arrays.asList Retorna java.util.arrays.arraylist, que é apenas uma classe interna de matrizes. Seu código não é longo, então eu o publiquei diretamente aqui:
Classe estática privada Arraylist <E> estende a abstrataList <e> implementa RandomAccess, java.io.Serializable {private estático final serialversionuid = -2764017481108945198l; private final e [] a; ArrayList (e [] Array) {a = Objects.RequirenOnNull (Array); } @Override public int size () {return A.Length; } @Override public Object [] ToArray () {return A.Clone (); } @Override @suppresswarnings ("desmarcado") public <T> t [] ToArray (t [] a) {int size = size (); if (a.Length <size) Retornar Arrays.copyof (this.a, tamanho, (classe <? estende t []>) a.getclass ()); System.arraycopy (this.a, 0, a, 0, tamanho); if (a.Length> tamanho) a [size] = null; retornar a; } @Override public e get (int index) {return a [index]; } @Override public E Set (Int Index, E Element) {e OldValue = A [index]; a [índice] = elemento; retornar OldValue; } @Override public int indexOf (objeto o) {if (o == null) {for (int i = 0; i <A.Length; i ++) if (a [i] == null) retornar i; } else {for (int i = 0; i <A.Length; i ++) se (O.Equals (a [i])) retornar i; } retornar -1; } @Override public boolean contém (objeto o) {return indexOf (o)! = -1; } @Override public spliterator <e> spliterator () {return spliterators.spliterator (a, spliterator.ordered); }} A partir do código -fonte, herda do AbstractList e não há um método de remoção, encontrei o método de remoção de abstrataList:
public e Remover (int index) {lança new UnsupportEdOperationException (); } É daí que vem a mensagem de erro. Finalmente, sabemos que o Arraylist retornou por Arrays.asList não suporta remover. De fato, java.util.arrays.arraylist não suporta nenhuma forma de remoção de elementos.
Em resumo, a solução para esse problema é de fato um gato cego que bate em um mouse morto, mas enquanto eu observar cuidadosamente o erro relatado:
em java.util.abstractList.remove (abstractlist.java:161)
Chamar o método de remoção de java.util.abstractList é diferente do que eu esperava e pode me dizer claramente a direção.
Espero que este artigo seja útil para que todos aprendam a programação Java.