Boolean.valueOf(string s)

Jun 29, 2023
Boolean.valueOf(string s)
아래 코드가 내가 예상한대로 동작하지 않았다
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
RSSPowered by inblog