어느날 코딩을 하던 도중 Listadd() 를 하였는데 에러가 발생하였다.

 

익셉션은 UnsupportedOperationException.

 

원인을 찾던 도중 해결에 결정적인 역활을 하는 글과 재밌는 것을 발견하였다.

 

우선 글은

 

https://stackoverflow.com/questions/5755477/java-list-add-unsupportedoperationexception

 

Java List.add() UnsupportedOperationException

I try to add objects to a List instance but it throws an UnsupportedOperationException. Does anyone know why? My Java code: String[] membersArray = request.getParameterValues('membe...

stackoverflow.com

인데 내용을 번역해보자면

모든 Listadd() 메서드를 구현, 지원하지 않으며 가장 일반적인 예로 Arrays.asList(); 같은 경우 고정된 사이즈의 Array 를 리턴한다.
그렇기에 사이즈를 수정할 수 없다.

 

이다.

나같은 경우 Arrays.asList(); 를 통해 만들어진 ArrayListadd 를 하고 있었다.

 

그래서 궁금한 마음에 Arrays  클래스를 확인해본 결과 우리가 흔히 사용하는 ArrayList 를 반환하는게 아니라 

 

Arrays 클래스 내부에 inner Class 로 구현해놓은 ArrayList 를 반환하고 있었다.

당연하게도 Arrays 클래스의 inner ClassArrayList 에는 사이즈 측정 및 조절을 위한 size 와 DEFAULT_CAPACITY 변수가 존재하지 않는다.

그리고 AbstractList 클래스를 상속받고 있어 상속받은 AbstractList 클래스의 add() 메서드는 존재하고 사용할 수는 있지만 


해당 AbstractList 클래스의 add() 메서드를  Override 하여 사용하지 않으면 해당 add() 메서드는  

throw new
UnsupportedOperationException(); 하도록 구현되어있기 때문에 UnsupportedOperationException 에러가 나게 된다.

 

 

 

+ Recent posts