Boolean.valueOf(string s)
Jun 29, 2023

아래 코드가 내가 예상한대로 동작하지 않았다
Boolean toBoolean(String s) {
try {
return Boolean.valueOf(s);
} catch (Exception e) {
return null;
}
}
s가 <null>이면 <null>이 리턴되길 기대했지만, Boolean.FALSE를 리턴하였다.
s가
“true”
가 아니면 <null>
일지라도 무조건 Boolean.FALSE를 리턴한다. // java.lang.Boolean
public static Boolean valueOf(String s) {
return parseBoolean(s) ? TRUE : FALSE;
}
public static boolean parseBoolean(String s) {
return "true".equalsIgnoreCase(s);
}
하지만,
<null>
을 리턴하지 않아 문제가 발생했다.wrapper 특성상 <null>, FALSE, TRUE 이렇게 3가지 타입이 가능하고, 3가지 타입에 따라 다르게 동작했어야 했다. 하지만, 아래 method에서 s가 <null>이면 <null>이 리턴되길 기대했지만, Boolean.FALSE를 리턴하였다.
사실 String → Long으로 convert 하는 아래 코드를 그대로 copy & paste해서 String → Boolean으로 convert하는 코드를 만들었던 것인데,
Long toLong(String s) {
try {
return Long.valueOf(s);
} catch (Exception e) {
return null;
}
}
// copy & paste
Boolean toBoolean(String s) {
try {
return Boolean.valueOf(s);
} catch (Exception e) {
return null;
}
}
Long.valueOf()는
NumberFormatException
을 발생하기 때문에 exception을 catch해도 됐던 것이다.public static Long valueOf(String s) throws NumberFormatException
{
return Long.valueOf(parseLong(s, 10));
}
Share article