Request processing failed; nested exception is java.lang.UnsupportedOperationException 자바 Exception 내용 정리 (Arrays.asList())

안녕하세요. 오늘은 Arrays.asList() 라는 메소드를 사용하다가 발생한 에러에 대해서 공유하고자 합니다.

 

먼저

 

List<String> list = Arrays.asList("A", "B", "C");

다음과 같이 Arrays.asList로 만든 list 객체가 있었고 추가적으로 "D"라는 문자열이 추가될 수 있는 상황이었습니다.

 

그리하여

 

list.add("D");

"D" 문자열을 추가해주었더니 다음과 같은 에러가 발생하였습니다.

 

Request processing failed; nested exception is java.lang.UnsupportedOperationException

 

왜 발생하는지 알아보기 위해서 Arrays의 asList 메소드를 까봤습니다. 

 

메소드 바로 위에 달린 주석을 참조하니 단번에 눈치챌 수 있었습니다.

 

ArrayList를 고정길이 배열처럼 생성한 것입니다. Arrays 클래스였다는 점에서 눈치를 챌 수도 있었는데 아직은 그런 짬밥은 안되었던 것 같습니다.

 

결론

Arrays.asList() 메소드는 ArrayList를 고정길이로 생성하기 때문에 배열처럼 이미 선언된 size를 초과한다면(asList메소드는 이미 모든 요소를 채워놓은 상황이기 때문에) add 메소드로 요소 추가시에 UnsupportedOperationException 예외를 발생시킨다. 즉, add 연산을 허용하지 않는 ArrayList 이다.

 

해결책

가변길이 ArrayList를 선언해서 처리해야한다. 

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
return list;

 

댓글

Designed by JB FACTORY