Java 목록 UnsupportedOperationException

1. 개요

이 빠른 자습서에서는 대부분의 List 구현 의 일부 API 인 UnsupportedOperationException 을 사용할 때 발생할 수 있는 일반적인 예외에 대해 설명합니다 .

를 java.util.List는 일반의보다 더 많은 기능이 rray가 지원할 수있다. 예를 들어, 하나의 내장 메서드 호출만으로 특정 요소가 구조 내부에 있는지 확인할 수 있습니다. 이것이 일반적으로 배열List 또는 Collection 으로 변환해야하는 이유 입니다.

핵심 Java List 구현 인 ArrayList에 대한 소개 는이 기사를 참조하십시오.

2. UnsupportedOperationException

이 오류가 발생하는 빈번한 방법은 java.util.Arrays의 asList () 메소드를 사용할 때입니다 .

public static List asList(T... a)

다음을 반환합니다.

  • 주어진 배열 의 크기에 따른 고정 크기 목록
  • 원래 배열 에있는 것과 동일한 유형의 요소이며 Object 여야합니다.
  • 같은 순서의 요소원래 배열에서와 같이
  • 직렬화 가능 하고 RandomAccess를 구현 하는 목록

T는 varargs 이므로 배열이나 항목을 매개 변수로 직접 전달할 수 있으며 메서드는 고정 크기의 초기화 목록을 생성합니다.

List flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");

실제 배열을 전달할 수도 있습니다 .

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = Arrays.asList(flowers);

반환 된 List 는 고정 된 크기의 List 이므로 요소를 추가 / 제거 할 수 없습니다 .

더 많은 요소를 추가하려고하면 UnsupportedOperationException 이 발생합니다 .

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = Arrays.asList(flowers); flowerList.add("Celosia");

예외 의 근원은 반환 된 객체가 java.util.ArrayList 와 동일하지 않기 때문에 add () 작업을 구현하지 않는다는 것입니다 .

그것은이다 ArrayList를 에서, java.util.Arrays.

동일한 예외를 얻는 또 다른 방법은 얻은 목록에서 요소를 제거하는 것입니다.

반면에 필요한 경우 변경 가능한 목록 을 얻는 방법이 있습니다 .

그중 하나는 asList () 의 결과에서 직접 ArrayList 또는 모든 종류의 목록 을 만드는 것입니다 .

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = new ArrayList(Arrays.asList(flowers));

3. 결론

결론적으로, 목록에 더 많은 요소를 추가하는 것은 불변 목록 이상의 문제가 될 수 있음을 이해하는 것이 중요합니다.

항상 그렇듯이 예제의 전체 소스 코드는 GitHub에서 사용할 수 있습니다.