아이템 30 - 이왕이면 제네릭 메서드로 만들라
JAVA
·
제네릭 메서드
- 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제네릭이다.
- 타입 매개변수 목록은 메서드의 제한자와 반환 타입 사이에 온다.
- eg) public static < E > Set< E > union(Set< E > s1, Set < E > s2) {…}
- 한정적 와일드카드 타입을 사용하면 더 유연하게 개선할 수 있다.
- 제네릭 싱글턴 팩터리
- 제네릭은 런타임에 타입 정보가 소거 되므로 불변 객체 하나를 어떤 타입으로든 매개변수화 할 수 있다.
- 제네릭이 실체화된다면 항등함수를 타입별로 하나씩 만들어야 했겠지만, 소거 방식을 사용한 덕에 제네릭 싱글턴 하나면 충분하다.
public class GenericSingletonFactory {
private static UnaryOperator<Object> IDENTITY_FN = (t) -> t;
@SuppressWarnings("unchecked")
public static <T> UnaryOperator<T> identityFunction() {
return (UnaryOperator<T>) IDENTITY_FN;
}
...
}
- 재귀적 타입 한정
- 자기 자신이 들어간 표현식을 사용하여 타입 매개변수의 허용 범위를 한정한다.
- eg) public static <E extend Comparable< E » E max(Collection c);
출처
이펙티브 자바 3/E
이펙티브 자바 완벽 공략 2