매개변수화 타입을 받는 정적 유틸리티 메서드
메서드도 제네릭으로 만들 수 있다. 먼저 원소 타입을 타입 매개변수로 명시하고, 메서드 안에서도 이 타입 매개변수만 사용할 수 있게 만들면 된다.
public static <E> Set<E> union(Set<E> s1, Set<E> s2) {}
위 코드에서 타입 매개변수는 이고 반환 타입은 Set이다.
제네릭 싱글턴 팩터리 패턴
다음 처러 제네릭 싱글턴 팩터리을 만들어 사용하면 타입을 사용하는 쪽에서 정해주기만 하면 된다.
import java.util.function.UnaryOperator;
public class GenericSingletonFactory {
private static UnaryOperator<Object> IDENTITY_FN = (t) -> t;
@SuppressWarnings("unchecked")
public static <T> UnaryOperator<T> identityFunction() {
return (UnaryOperator<T>) IDENTITY_FN;
}
}
재귀적 타입 한정
다음과 같이 재귀적 타입 한정을 사용하여 Comparable를 상속한 클래스만 사용할 수 있도록 제한을 둘 수 있다.
public class RecursiveTypeBound {
public static <E extends Comparable<E>> E max(Collection<E> c) {
...
}
}