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