먼저 Preconditions을 보면 NullPointerException 반환하는 메소드는 그리 유용해 보이지 않으니
checkArgument가 적용 전과 후를 비교해본다.
if (composite.getProp() == null) throw new IllegalArgumentException();
Preconditions.checkArgument(composite.getProp()!= null);
if 보다는 Preconditions.checkArgument가 읽기에 좋지만, IllegalArgumentException가 발생하는 것이 암묵적인 내용이 된다. checkArgument가 IllegalArgumentException을 반환한다는 사실을 알아야 한다. 굵은 색으로 표시한 곳에 표현식(expression)을 넣어야 한다. 다시 말하면 일종의 비즈니스 규칙을 명제로 표현해야 한다. isOOO 류의 메소드로 도메인 객체의 Validation 메소드를 표준화한다면, Validation 메소드 안으로 저 내용이 들어가면 유익할 듯하다.
notNull()이 필요한 경우 Short cut은 쓸만하다.
null이 아니면 할당을 하게 하는 위 구문은 짧게 쓸 수 있다.Preconditions.checkNotNull(givenName);
this.givenName = givenName;
Iterables.getOnlyElementthis.givenName = Objects.nonNull(givenName);
를 보면 Set.iterator().next() 나 List.get(0) 보다는 읽기에 좋다.
Comparators.max는 확연하게 마음에 든다.
return a.compareTo(b) > 0 ? a : b;return Comparators.max(a, b);
숫자로 값을 반환하는 것은 진부한 것이 아닌가 생각된다.
Objects.equal and hashCode 경우도 IDE나 이클립스 플러긴을 이용하거나 직접 작성하는 것보다 좋아 보인다.// equlas 구현 일부
return (address != null ? address.equals(that.address) : that.address == null)
&& (targetArrivalDate != null ? targetArrivalDate.equals(that.targetArrivalDate)
: that.targetArrivalDate == null)
&& lineItems.equals(that.lineItems);// Google Collections 사용 시return Objects.equal(address, that.address)
&& Objects.equal(targetArrivalDate, that.targetArrivalDate)
&& Objects.equal(lineItems, that.lineItems);
// hashcode 구현public int hashCode() {
int result = 0;
result = 31 * result + (address != null ? address.hashCode() : 0);
result = 31 * result + (targetArrivalDate != null ? targetArrivalDate.hashCode() : 0);
result = 31 * result + lineItems.hashCode();
return result;
}Google Collections 사용 시
//public int hashCode() {
return Objects.hashCode(address, targetArrivalDate, lineItems);
}
Lists.immutableList도 간소하다.
Collection을 이어붙이는 Iterables.concat도 있고, 하나의 키에 여러 개 요소를 Map에 담을 때 유용한 Multimap, SQL 문을 수작업으로 할 때 유용할 Join, 코드성 데이터 처리에 유익한 BiMap 등이 있다.this.steps = Collections.unmodifiableList(new ArrayList<Step>(steps)); // 사용 전this.steps = Lists.immutableList(steps);// 사용슬슬 지루해진다. 나머지 API 역시 전체적으로 설계 사상은 비슷하다.

bookmarks.xml










