java.lang.ClassCastException: class [I cannot be cast to class java.lang.Integer

구창회·2022년 11월 19일
0

에러 사전

목록 보기
3/10

java.lang.ClassCastException: class [I cannot be cast to class java.lang.Integer ([I and java.lang.Integer are in module java.base of loader 'bootstrap')
at line 19, Solution.generate
at line 54, DriverSolution.helper
at line 84, Driver.main

리트 코드 문제를 풀던 중
오류가 발생해 버렸다.

원문의 코드

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ans = new ArrayList<>();
        
        if (numRows >= 2) {
            ans.add(new ArrayList(Arrays.asList(1)));
            ans.add(new ArrayList(Arrays.asList(1, 1)));    
        } else if (numRows >= 1) {
            ans.add(new ArrayList(Arrays.asList(1)));
        }
        
        for (int i = 3; i <= numRows; i++) {
            
            int[] nums = new int[i]; // 선언부 int[]
            
            nums[0] = 1;
            nums[nums.length - 1] = 1;
            
            List<Integer> prev = ans.get(i - 2); // 선언부 prev
            for (int j = 0; j < i - 2; j++) {
                
                nums[j + 1] = prev.get(j); // 오류가 발생한 지점
            	
            List<Integer> row = new ArrayList(Arrays.asList(nums));
            ans.add(row);
            }
        }
        
        return ans;
    }
}

Integer 를 제너릭으로 하는 리스트의 아이템을, int 배열에 넣는데 왜 오류가 발생하는 것일 까 라는 의문이 생겼다.

나는 자동으로 wrapper class 의 boxing, unboxing 개념이 적용 될 줄 알았지만, 그렇지 않은 것이 에러의 원인 이었다.

따라서 해당 오류 나는 코드를 바꾸기 위해서 위 코드의 선언부의 배열 타입을 아래와 같이 바꾼 것으로 오류를 해결하였다.

Integer[] nums = new Integer[i];

또한, Arrays.asList 메서드가 int 형태를 자동으로 Integer 타입으로 boxing 해주지 않는다고 한다.

아래는 비슷한 고민의 stackoverflow 의 답변
asList 는 boxing 을 지원하지 않는 다고 말하고 있다.
링크텍스트

profile
백엔드 엔지니어 프로 지망생

0개의 댓글