Java

List.. 너 도대체 뭐냐?

java.lang.UnsupportedOperationException가 발생한다.

 

public class Sections {

    private List<Section> sections = new ArrayList<>();

    public Sections() {
    }

    public Sections(List<Section> sections) {
        this.sections = sections;
    }
    
    public void addSection(Section section) {
        sections.add(section);
    }
}

 

    @BeforeEach
    void setUp() {
    	//1. UnSupportOperation 발생 안함.
        List<Section> sectionInputs = new ArrayList<>();
        sectionInputs.add(SECTION);
        sections = new Sections(sectionInputs);
        
        //2. 발생함
        sections = new Sections(Arrays.asList(SECTION));
        
        //3. 발생함
        sections = new Sections(Collections.singletonList(SECTION));
    }

    @Test
    @DisplayName("새로운 구간을 추가한다.")
    void addSection() {
        sections.addSection(SECTION_FOR_ADD);
    }

 

Arrays.asList(), Collections.singletonList, Collections.EMPTY_LIST, List.of 는 모두 unmodifiable List이므로 불변 리스트하다.

따라서 add 요청이 들어왔을 때 예외를 뱉는 것!!!!!

 

new ArrayList<>()로 초기화해주는 방법을 통해 UnsupportedOperationException를 해결할 수 있다. 

 

위와 같이 불변 리스트를 이용하지 않았는데도 이 예외가 발생한다면, 아마 그 리스트를 초기화해주지 않았을 것이다.

 

 

 

 

참고 자료

https://blog.woniper.net/350

https://kim-jong-hyun.tistory.com/31

 

Special Thanks to 댓글