java.lang.UnsupportedOperationException

yoondgu·2022년 9월 26일
0

오류 기록

목록 보기
8/10

CSV파일을 읽으면서 생성한 List<List> 객체에서 꺼낸,
List 객체에 대하여 add() 메소드를 호출했을 때 이 오류가 발생하였다.

이 객체는 BufferedReader를 이용해 CSV파일을 읽는 과정에서,
아래처럼 Arrays.asList로 만들었고 그걸 ArrayList에 담아뒀다가 꺼내서 사용하는 상황이다.

  while ((line = br.readLine()) != null) { 
    List<String> aLine = new ArrayList<String>();
    String[] lineArr = line.split(","); 
    aLine = Arrays.asList(lineArr);
    csvList.add(aLine);
  }

문제는 간단하다. 모든 List가 add메소드를 지원하지는 않는다.
Arrays.asList 는 Arrays 클래스 내부에 구현해놓은 내부 클래스인 ArrayList를 반환한다.
기능적으로만 생각하자면 이 리스트는 사이즈가 고정되어 있기 때문에 add메소드를 사용할 수 없다.

또 자바 API가 설계된 것을 살펴보는 관점에서 보자면
Arrays 클래스의 코드를 봐도 왜 add메소드를 쓸 수 없는지 알 수 있다.
Arrays 클래스의 내부클래스인 ArrayList는 AbstractList 클래스를 상속받고 여러 기능들을 재정의하고 있다.
하지만 add메소드는 재정의하지 않았다.
그러니까 이 ArrayList는 add메소드를 제공하지 않는 리스트로 설계된 것이다. = 사이즈가 고정된 List니까.

해결방법도 간단하다.
아래와 같이 util패키지의 ArrayList클래스를 통해 생성하면 된다.

 aLine = new ArrayList<>(Arrays.asList(lineArr));

0개의 댓글