apache common의 BooleanUtils는 쓸 때 없는 api가 많긴 하지만, 괜찮은 api 가 2 개 정도 있다.

 BooleanUtils.toBoolean()과  BooleanUtils.toBooleanDefaultIfNull()이 존재한다.



- BooleanUtils.toBoolean()은 String 타입의 boolean 값을 변환한다. toBoolean()의 결과 중 true, false로 변환할 수 있는 문자열을 제외하고는 모두 false를 리턴한다.

@Test
public void booleanUtilsTest() {
System.out.println(BooleanUtils.toBoolean("true"));
System.out.println(BooleanUtils.toBoolean("false"));
System.out.println(BooleanUtils.toBoolean(""));
System.out.println(BooleanUtils.toBoolean("aaa"));
}

결과


true

false

false

false




참고로.. BooleanUtils.toBoolean()의 내부 구현체이다.

public static boolean toBoolean(Boolean bool) {
if (bool == null) {
return false;
}
return bool.booleanValue() ? true : false;
}





하지만, toBooleanDefaultIfNull()는 null 값에 대해 값을 명시할 수 있다. 예를 들어, null이면 false가 아닌 true로 리턴할 수 있다.


@Test
public void booleanUtilsTest() {
System.out.println(BooleanUtils.toBooleanDefaultIfNull(Boolean.TRUE, true));
System.out.println(BooleanUtils.toBooleanDefaultIfNull(Boolean.FALSE, false));
System.out.println(BooleanUtils.toBooleanDefaultIfNull(null, true));
}

결과

true

false

true


내부 구현은 다음과 같다.


public static boolean toBooleanDefaultIfNull(Boolean bool, boolean valueIfNull) {
if (bool == null) {
return valueIfNull;
}
return bool.booleanValue() ? true : false;
}





 BooleanUtils.toBoolean()과  BooleanUtils.toBooleanDefaultIfNull()에 관련된 예시 코드이다. 


@Test
public void exceptionTest() {
List<Member> members = Lists.newArrayList();
members.add(new Member("1", true));
members.add(new Member(null, null));
members.add(new Member("3", false));

System.out.println("== first - NPE");
try {
for (Member member : members) {
if (true == member.followable) { // NPE!!
System.out.println(member.id);
}
}
} catch (Exception e) {
e.printStackTrace();
}

System.out.println("== second chance using BooleanUtils - exclude null");
for (Member member : members) {
if (!BooleanUtils.toBoolean(member.followable)) {
System.out.println(member.id + "," + member.followable);
}
}

System.out.println("== another chance - exclude null, true");
for (Member member : members) {
if (member.followable != null && member.followable == false) {
System.out.println(member.id + "," + member.followable);
}
}

System.out.println("== another chance using BooleanUtils- exclude null, true");
for (Member member : members) {
if (!BooleanUtils.toBooleanDefaultIfNull(member.followable, true)) {
System.out.println(member.id + "," + member.followable);
}
}

}


결과


== first - NPE

1

java.lang.NullPointerException

at com.google.NullElementTest.exceptionTest(NullElementTest.java:24)

== second chance - exclude null

null,null

3,false

== another chance - exclude null, true

3,false

== another chance using BooleanUtils- exclude null, true

3,false



Posted by '김용환'
,