제네릭 타입과 같은 맥락으로 메서드 역시 제네릭 메서드로 만드는 것이 좋다. (같은 기능을 더 편하게 제공)
다양한 제네릭 메서드
여러 타입으로 반환, 입력을 받을 필요가 있을 때 - Set, List 와 같은 제네릭 타입을 인수로 받고 반환하는 메서드
불변 객체를 여러 타입으로 사용하고 싶을 때 - 제네릭 싱글턴 팩터리
예시 코드
public class GenericSingletonFactory {
private static Map<Class<?>, Object> instances = new HashMap<>();
public static <T> T getInstance(Class<T> type) {
if (!instances.containsKey(type)) {
try {
T instance = type.getDeclaredConstructor().newInstance();
instances.put(type, instance);
} catch (Exception e) {
// 예외 처리 코드
}
}
return type.cast(instances.get(type));
}
}
항등함수
를 만들 때 - 자기 자신을 반환하는 함수, map 에서 그대로 반환할 때 사용한다고 함
예시 코드
public static <T> T identity(T value) { return value; }
자기 자신의 타입으로 메서드를 사용하고 싶을 때 - 재귀적 타입 한정
예시 코드
public static <E extends Comparable<E>> E max(Collection<E> c);
E 타입인 자신과 비교할 수 있는 Comparable<E> 를 상속하는 E 타입을 사용하도록 설정하였다.