바운디드 타입 파라미터 (Bounded Type Parameters)
바운디드 타입 파라미터는 타입 인자의 타입을 제한하기 위해 사용한다.
<T extends B>
- 타입 파라미터 T의 타입 인자를 B 의 하위 타입으로 제한함
- 이때 extends 키워드는 확장(extends)과 구현(implements)의 의미를 모두 포괄한다.
public <U extends Number> void inspect(U u){ System.out.println("T: " + t.getClass().getName()); System.out.println("U: " + u.getClass().getName()); }
inspect 메서드의 파라미터 u의 타입을 Number 의 서브 타입으로 제한함
이때 inspect 메서드에 Number의 서브 타입이 아닌 타입을 인자로 전달하면 컴파일 에러가 발생한다.
바운디드 타입 파라미터는 제네릭 메서드 뿐만 아니라 제네릭 타입에서도 활용될 수 있다.
또한 바운디드 타입 파라미터를 사용한 경우 타입 파라미터에서 바운드한 타입의 메서드를 호출할 수 있다.
public class NaturalNumber<T extends Integer> { private T n; public NaturalNumber(T n) { this.n = n; } public boolean isEven() { return n.intValue() % 2 == 0; } // ... }
다중 바운드 Multiple Bounds
<T extends B1 & B2 & B3>
- T는 B1 의 서브 타입 이면서 B2, B3 의 서브 타입이어야함
- 이때 다중 바운드 타입 (B1, B2, B3)에는 최대 하나의 클래스가 포함될 수 있으며 클래스가 포함 된 경우 가장 먼저 표기 되어야함