Во -первых, дать кусок кода:
открытый класс aslistmethod {public static void main (string [] args) {String pretence = "Я люблю тебя"; List <string> words = arrays.aslist (endence.split ("")); for (int i = 0; i <words.size ();) {if (words.get (i) .equals ("love")) {words.remove (i); продолжать; } i ++; } System.out.println (words); }Затем запустите этот код, и, наконец, сообщалась об ошибке:
Исключение в потоке "Main" java.lang.unsupportedOperationException at java.util.abstractlist.remove (AbstractList.java:161) в list.aslistmethod.main (aSlistmethod.java:12)
В нижней части списка цепочки ошибок. Aslistmethod.main (aSlistmethod.java:12) посвящена этой строке кода:
words.remove (i);
Эта ошибка заставила меня смутить, потому что я грубо посмотрел этот код, прежде чем написать этот код. Метод Arrays.aslist возвращает ArrayList. Почему я не могу его удалить? Затем, из -за небольшой ошибки, результат Arrays.Aslist был назначен на java.util.arraylist, но задание не удалось. Я сразу почувствовал, как слепая кошка ударила по мертвой мышью. Затем следуйте методу Arrays.aslist и обнаружите, что этот Arraylist не тот же ArrayList. Arrays.aslist возвращает java.util.arrays.arraylist, что является лишь внутренним классом массивов. Его код не длинный, поэтому я разместил его прямо здесь:
Частный статический класс ArrayList <e> расширяет AbstractList <e> реализует randomAccess, java.io.serializable {private Static final Long SerialVersionuid = -2764017481108945198L; Частный финал E [] a; Arraylist (e [] array) {a = objects.requirenonlull (массив); } @Override public int size () {return a.length; } @Override public object [] toarray () {return a.clone (); } @Override @suppresswarnings ("unchecked") public <t> t [] toarray (t [] a) {int size = size (); if (a.length <размер) return Arrays.copyof (this.a, size, (class <? Extends t []>) a.getClass ()); System.ArrayCopy (this.a, 0, a, 0, size); if (a.length> size) a [size] = null; вернуть А; } @Override public e Get (int index) {return a [index]; } @Override public e set (int index, e element) {e oldValue = a [index]; a [index] = element; вернуть OldValue; } @Override public int indexof (Object O) {if (o == null) {for (int i = 0; i <a.length; i ++) if (a [i] == null) return i; } else {for (int i = 0; i <a.length; i ++) if (o.equals (a [i])) return i; } return -1; } @Override public boolean содержит (Object o) {return indexof (o)! = -1; } @Override public spliterator <e> spliterator () {return spliterators.spliterator (a, spliterator.ordered); }} Из исходного кода он наследует от AbstractList, и нет метода удаления, я нашел метод удаления AbstractList:
public e удалить (int index) {бросить новый UnsupportedOperationException (); } Вот откуда происходит сообщение об ошибке. Наконец, мы знаем, что ArrayList, возвращенный Arrays.aslist, не поддерживает удаление. Фактически, java.util.arrays.arraylist не поддерживает какую -либо форму удаления элементов.
Подводя итог, решение этой проблемы действительно немного похоже на слепую кошку, попавшую в мертвую мышь, но пока я внимательно смотрю на ошибку, сообщаемая:
на java.util.abstractlist.remove (Abstractlist.java:161)
Вызов метод удаления java.util.abstractlist отличается от того, что я ожидал, и он может ясно сказать мне направление.
Я надеюсь, что эта статья будет полезна всем, чтобы изучить Java -программирование.