Map에 있는 값 형변환하기
1. 이슈
페이징을 구현하는 과정에서 Map에 있는 값을 int로 가져와서 사용해야 하는 일이 있었다.
그러나 int로 강제 형변환해서 사용하면 될 거라 단순하게 생각했지만 오류가 발생했다.
int current_page = (Integer)map.get("current_page");
-- java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 발생
이를 올바르게 해결하려고 했다.
2. Map에 있는 값 형변환하기
첫번째로 Stiring -> int로 전환하여 사용하려 했다.
int current_page = Integer.parseInt((String)map.get("current_page"));
-- java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 발생
그러나 이 또한 casting 오류가 발생했다. (실패)
두 번째로 Stirng.valueOf를 활용하여 변환 후 이를 다시 int로 전환했다.
int x = Integer.parseInt(String.valueOf(map.get("current_page")));
이 방법은 casting 오류 없이 성공했다.
사용된 메서드를 살펴보자면
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
Integer.parseInt() 메서드는 매개변수를 String으로 받는다.
때문에 Object값을 먼저 String으로 변환하고 이를 다시 int로 출력할 수 있다.
String.valueOf() 메서드를 통해서 Object를 String으로 변환을 시켜줬다.
하지만 매개변수가 String으로 들어가면 되기 때문에 toString()을 사용하여 진행해도 오류가 발생하지 않는다.
int current_page = Integer.parseInt(map.get("current_page").toString());
그러나 변경하고자 하는 Object가 null인 경우에 결과가 달라진다.
- String.valueOf() - 파라미터가 null이면 문자열 "null"을 만들어서 반환
-
toString() - 대상 값이 null이면 NPE를 발생시키고 Object에 담긴 값이 String이 아니어도 출력
참고
Map<String, Object>의 안에 Object를 int로 바꾸는 방법
Spring Tool Suite 4 springboot 에서 PostgerDB를 이용하여 사용자의 로그인 요청이 오면, 아이디와 패스워드를 확인하여 결과값을 반환하기 위함. ※ UserRepository (JPA extends)는 작성되어있다는 가정 작성한
mamm.tistory.com
https://swjeong.tistory.com/146
[Java] toString()과 String.valueOf()의 차이점
두 메소드 모두 Object의 값을 String으로 변환하지만 변경하고자 하는Object가 null인 경우 다르다.toString()과 같은 경우 Null PointerException(NPE)을 발생시키지만 valueOf는 "null"이라는 문자열로 처리한다.
swjeong.tistory.com
잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다. |
