error , solution

Java List 에 add() 했을 때 오류 UnsupportedOperationException

검은고양이개발자 2023. 1. 20. 12:43
반응형

오류원인


 

Arrays.asList() 메소드는 고정길이의 원배열의 list view를 리턴합니다.

 

즉, 고정길이인 원래 배열의 list view를 리턴하기 때문에

Arrays.asList()를 사용해서 배열을 List로 변환한 후, 길이를 List에 값을 추가하는 것이 불가능하고,

원래 배열의 값을 변경하면 List의 값도 같이 변경됩니다.

 

public class anything {
    public static void main(String[] args) {
        Integer[] arr = {1,2,3,4,5};
        List<Integer> list = Arrays.asList(arr);

        System.out.println(list);
        list.add(1);
    }
}
//출력
[1, 2, 3, 4, 5]
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.base/java.util.AbstractList.add(AbstractList.java:155)
	at java.base/java.util.AbstractList.add(AbstractList.java:113)
	at 연습.연습6.anything.main(anything.java:10)

 

해결법


 

이렇게 원본 배열의 값과 변환 된 List의 값이 동기화 되는 것을 막기 위해서

Arrays.asList()로 변환한 List로 새로운 ArrayList 객체를 생성해서 사용할 수 있습니다.

 

public class anything {
    public static void main(String[] args) {
        Integer[] arr = {1,2,3,4,5};
        List<Integer> list = new ArrayList<>(Arrays.asList(arr));

        list.add(1);

        System.out.println(list);

    }
}
//출력
[1, 2, 3, 4, 5, 1]

 

반응형