Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- SQL
- 클라우드
- feign
- 페이징
- Spring Cloud
- PL/SQL
- JPA
- MVC
- 자바
- 자료구조
- Spring Boot
- Jenkins
- 코딩
- Intellj
- aws
- 운영체제
- MST
- 쿼리
- retry
- Spring
- DP
- db
- 디자인 패턴
- 데이터베이스
- golang
- 백준
- Spring Cloud Feign
- Kafka
- 오라클
- 알고리즘
Archives
- Today
- Total
justgo_developer
Arrays.asList() 사용시 java.lang.UnsupportedOperationException 본문
728x90
반응형
java : Arrays.asList() + java.lang.UnsupportedOperationException
목차
- List 일반적인 생성 방법
- Arrays.asList 사용하여 생성 방법
- Arrays.asList 사용 시 문제를 해결방법
개요
Arrays.asList로 배열을 List로 선언 후 리스트 값이 추가되거나 제거 될때UnsupportedOperationException
예외가 발생.
상세
1. List 일반적인 생성 방법
@Test
public void generalCreateList() {
List<String> sourceList = new ArrayList<>();
sourceList.add("order");
sourceList.add("delivery");
sourceList.add("claim");
sourceList.add("return");
sourceList.stream().forEach(System.out::println);
Assertions.assertFalse(sourceList.isEmpty());
}
728x90
2. Arrays.asList 사용하여 생성 방법
1번의 경우 소스 코드 라인 수가 길어져 2번과 같은 방법을 선호함.
하지만 Arrays.asList로 배열을 List로 선언 후 리스트 값이 추가되거나 제거 될때UnsupportedOperationException
예외가 발생.
@Test
public void throwUnsupportedOperationExceptionTest() {
List<String> sourceList = Arrays.asList("order", "delivery", "claim", "return");
Assertions.assertThrows(UnsupportedOperationException.class, () -> {
sourceList.add("cancel");
});
Assertions.assertThrows(UnsupportedOperationException.class, () -> {
sourceList.remove(0);
});
}
Arrays.asList(..) is collection that can't be expanded or shrunk (because it is backed by the original array, and it can't be resized).
If you want to remove elements either create a new ArrayList(Arrays.asList(..) or remove elements directly from the array (that will be less efficient and harder to write)
결론 : Arrays.asList(..)는 리스트 길이를 고정시키기 때문에 추가하거나 제거할수 없음.
3. 2번 문제를 해결하기 위해 List 객체를 생성하고 인자로 넣어 사용
@Test
public void notThrowUnsupportedOperationExceptionTest() {
List<String> sourceList = new ArrayList<>(Arrays.asList("order", "delivery", "claim", "return"));
sourceList.add("cancel");
sourceList.stream().forEach(System.out::println);
Assertions.assertEquals(5, sourceList.size());
}
728x90
반응형
'IT > 자바' 카테고리의 다른 글
Json File Download(HttpURLConnection, FeignClient) (0) | 2023.10.10 |
---|---|
추상 팩토리 패턴(Abstract Factory Pattern)를 이용한 인터페이스 중복 메소드 제거 (0) | 2023.10.10 |
SOLID 원칙 (0) | 2021.02.06 |
피터 코드의 상속 규칙 (0) | 2021.02.06 |
OOP(객체지향프로그램) 4가지 원리 (1) | 2021.02.06 |