먼저 코드를 제공하십시오.
공개 클래스 aslistmethod {public static void main (String [] args) {String sentence = "나는 당신을 사랑합니다"; list <string> words = arrays.aslist (sentence.split ( "")); for (int i = 0; i <words.size ();) {if (words.get (i) .equals ( "love")) {words.remove (i); 계속하다; } i ++; } system.out.println (단어); }그런 다음이 코드를 실행하고 마지막으로 오류 가보고되었습니다.
스레드의 예외 "main"java.lang.unsupportedoperationException at java.util.abstractlist.remove (acpractList.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가 아님을 찾으십시오. Array.Aslist는 java.util.arrays.arraylist를 반환합니다. 이는 내부 배열 클래스입니다. 코드는 길지 않아서 직접 게시했습니다.
Private STATIC CLASS ARRAYLIST <E> 확장 AbstractList <e>는 RandomAccess, java.io.serializable {private static final long serialversionuid = -2764017481108945198L을 구현합니다. 개인 최종 E [] a; ArrayList (e [] array) {a = objects.requirenonnull (배열); } @override public int size () {return a.length; } @override public Object [] toArray () {return A.Clone (); } @override @suppresswarnings ( "확인되지 않은") public <t> t [] toarray (t [] a) {int size = size (); if (a.length <size) return array.copyof (this.a, size, (class <? extends t []>) a.getclass ()); System.arrayCopy (this.a, 0, a, 0, size); if (a.length> size) a [size] = null; 반환 a; } @override public e get (int index) {return a [index]; } @override public e set (int index, e element) {e OldValue = a [index]; [색인] = 요소; 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])) 반환 i; } 반환 -1; } @override public boolean includes (object o) {return indexof (o)! = -1; } @override public spliterator <e> spliterator () {return spliterator.spliterator (a, spliterator.ordered); }} 소스 코드에서 AbstractList에서 상속되고 제거 메소드가 없으므로 AbstractList의 제거 메소드를 찾았습니다.
public e remove (int index) {새로운 unsupportedOperationException (); } 오류 메시지가 나오는 곳입니다. 마지막으로, 우리는 Arrays에서 반환 된 Arraylist가 제거를 지원하지 않는다는 것을 알고 있습니다. 실제로 java.util.arrays.arraylist는 어떤 형태의 요소 제거를 지원하지 않습니다.
요약하면,이 문제에 대한 해결책은 실제로 죽은 마우스를 때리는 맹인 고양이와 약간 비슷하지만, 오류를주의 깊게 살펴보면 다음과 같습니다.
at java.util.abstractlist.remove (actractList.java:161)
java.util.abstractlist의 제거 방법을 호출하는 것은 내가 예상 한 것과 다르며 방향을 명확하게 알려줄 수 있습니다.
이 기사가 모든 사람이 Java 프로그래밍을 배우는 데 도움이되기를 바랍니다.