개발을 하던 와중에 Arrays의 asList를 이용해서 리스트를 선언과 초기화를 해준 뒤 다음 이후에 리스트를 추가하거나 삭제하려고 했더니 UnsupportedOperationException이 발생했다. 에러 메세지만 보면 내가 작성한 코드가 지원할 수 없다는 내용인데,
이유를 찾아보니 Arrays.asList는 배열을 리스트로 그냥 덮어씌운상태(래핑)로 변경되고, 변경된 상태의 데이터들은 배열을 이용하고 있고 asList자체가 타겟으로 들어온 배열의 길이를 고정된 값으로 리턴하기 때문에, add나 remove를 사용할 수 없다는 것 같다. 다만 set을 이용하면 데이터 교체는 가능하다.
결론적으로 asList를 이용해서 내가 원하는 결과(List로 리턴받아 add, remove)를 수행하려면 다음과 같이 작성해야 했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class ListTest {
public static void main(String[] args) {
// testCodes.codesOne.add("5"); // UnsupportedOperationException 발생
testCodes.codesOne.set(3, "5"); // set을 이용하면 수정은 가능하나 확장은 불가능하다.
testCodes.codesTwo.add("5"); // 정상적으로 삽입됨
}
private interface testCodes {
String a = "1";
String b = "2";
String c = "3";
String d = "4";
List<String> codesOne = Arrays.asList(a,b,c,d); // {a,b,c,d} -> [a,b,c,d]가 된 것뿐임
ArrayList<String> codesTwo = new ArrayList<>(Arrays.asList(a,b,c,d));
List<String> emptyCodes = new ArrayList<>();
}
}
|
cs |
※ 나의 경우 List를 선언과 동시에 초기화를 하고싶어서 이렇게 썼지만, 배열 -> 리스트로 변경할 때도 기본 내용은 비슷하다.
위 화면의 주석을 확인하면 이해가 쉬울 것 같고, 이번일로 Arrays.asList에 대해서 알아볼 수 있는 기회가 되어서 유익했던 것 같다.
'JAVA' 카테고리의 다른 글
Itextpdf를 이용한 html 파일 PDF 변환 및 암호설정 (0) | 2022.04.14 |
---|---|
Java 클래스의 변수명 가져오기 (0) | 2021.11.23 |
Java 실수형 자료 계산하기 (0) | 2021.06.08 |
Java를 처음부터 다시 살펴본 후기 (0) | 2021.05.21 |
JAVA의 Optional 정리 (Java 8 기준) (0) | 2021.03.22 |