[개발] 프로그램 지식

[java error] ClassCastException: java.lang.String cannot be cast to java.lang.Integer

  • -
반응형

 

[Java Error] ClassCastException 해결 방법

Java 개발을 하다 보면 ClassCastException 에러를 종종 마주할 수 있습니다. 특히, 문자열(String)을 정수(Integer)로 변환하는 과정에서 java.lang.String cannot be cast to java.lang.Integer라는 에러가 발생하는 경우가 많습니다. 이번 포스팅에서는 이 에러의 원인과 해결 방법을 알아보겠습니다.

 

 

 

 

 

 

1️⃣ 에러 상황

아래 코드를 실행할 때 ClassCastException이 발생한다고 가정합니다:

commandMap.put("seq", Integer.parseInt((String) commandMap.get("seq")));

에러 메시지:


Exception in thread "main" java.lang.ClassCastException: 
java.lang.String cannot be cast to java.lang.Integer
    

 

 

 

 

 

 

2️⃣ 에러 원인

이 에러는 commandMap.get("seq")가 반환한 값이 문자열(String)이 아니거나, 캐스팅 방식에 문제가 있을 때 발생합니다.

  • 문자열(String) 값을 정수(Integer)로 변환하는 과정: commandMap.get("seq")에서 반환된 값이 문자열(String)이 아닐 경우 문제가 발생합니다.
  • 반환된 값이 null, Integer, 혹은 다른 객체일 경우 캐스팅에 실패하게 됩니다.

 

 

 

 

 

 

 

3️⃣ 해결 방법

아래 단계를 통해 문제를 해결할 수 있습니다.

Step 1. 값이 문자열인지 확인하기


Object value = commandMap.get("seq");
if (value instanceof String) {
    try {
        int seq = Integer.parseInt((String) value);
        commandMap.put("seq", seq);
    } catch (NumberFormatException e) {
        System.out.println("값을 정수로 변환할 수 없습니다: " + value);
    }
} else {
    System.out.println("값이 문자열이 아닙니다: " + value);
}
    

Step 2. null 처리


Object value = commandMap.get("seq");
if (value != null && value instanceof String) {
    try {
        int seq = Integer.parseInt((String) value);
        commandMap.put("seq", seq);
    } catch (NumberFormatException e) {
        System.out.println("값을 정수로 변환할 수 없습니다: " + value);
    }
} else {
    System.out.println("값이 null이거나 문자열이 아닙니다.");
}
    

Step 3. 단순화된 코드


String value = (String) commandMap.get("seq");
if (value != null) {
    try {
        int seq = Integer.parseInt(value);
        commandMap.put("seq", seq);
    } catch (NumberFormatException e) {
        System.out.println("값을 정수로 변환할 수 없습니다: " + value);
    }
} else {
    System.out.println("값이 null입니다.");
}
    

 

 

 

 

 

 

 

4️⃣ 안전한 변환 예제


import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Object> commandMap = new HashMap<>();
        commandMap.put("seq", "123");

        // 값 가져오기 및 변환
        Object value = commandMap.get("seq");

        if (value != null && value instanceof String) {
            try {
                int seq = Integer.parseInt((String) value);
                commandMap.put("seq", seq); // 변환된 정수 값 저장
                System.out.println("변환 성공: " + seq);
            } catch (NumberFormatException e) {
                System.out.println("값을 정수로 변환할 수 없습니다: " + value);
            }
        } else {
            System.out.println("값이 null이거나 문자열이 아닙니다.");
        }
    }
}
    

 

 

 

 

 

 

 

 

 

 

5️⃣ 정리

ClassCastException: java.lang.String cannot be cast to java.lang.Integer는 주로 문자열 데이터 처리 과정에서 발생합니다.

이를 방지하려면:

  1. 데이터 타입(String)을 먼저 확인합니다.
  2. null 값을 처리합니다.
  3. NumberFormatException 예외를 처리합니다.

위의 방식을 적용하면 데이터 변환 시 발생하는 에러를 효과적으로 방지할 수 있습니다. 😊

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.