chapter13. 제네릭.
13.5 제한된 타입 파라미터(<T extends 최상위타입>)
* 타입 파라미터에 지정되는 구체적인 타입을 제한할 필요가 있을 경우
- 상속 및 구현 관계를 이용해서 타입을 제한
// 상위 타입은 클래스 뿐만 아니라 인터페이스도 가능하다
: 인터페이스라고해서 extends 대신 Implements를 사용하지 않는다
- 타입 파라미터를 대체할 구체적인 타입
// 상위타입이거나 하위 또는 구현 클래스만 지정할 수 있다.
- 주의할 점
// 메소드의 중괄호 {} 안에서 타입 파라미터 변수로 사용 가능한 것은
상위 타입의 멤버(필드, 메소드)로 제한된다
// 하위 타입에만 있는 필드와 메소드는 사용할 수 없다.
| package sec05.exam01_bounded_type; public class BoundedTypeParameterExample { public static void main(String[] args) { // String str = Util.compare("a", "b"); (x) // String은 Number 타입이 아님 int result1 = Util.compare(10, 20); // 20은 자동 Boxing이 된다 (int->integer) System.out.println(result1); int result2 = Util.compare(4.5, 3); // 4.5는 자동 Boxing이 된다 (double->Double) System.out.println(result2); } } | cs |
|
| package sec05.exam01_bounded_type; public class Util { public static <T extends Number> int compare(T t1, T t2) { double v1 = t1.doubleValue(); //System.out.println(t1.getClass().getName()); double v2 = t2.doubleValue(); //System.out.println(t2.getClass().getName()); return Double.compare(v1, v2); }// 앞이 크면 1, 뒤가 크면 -1 } | cs |
|