chapter13. 제네릭. 


13.5 제한된 타입 파라미터(<T extends 최상위타입>)


* 타입 파라미터에 지정되는 구체적인 타입을 제한할 필요가 있을 경우

- 상속 및 구현 관계를 이용해서 타입을 제한

// 상위 타입은 클래스 뿐만 아니라 인터페이스도 가능하다

: 인터페이스라고해서 extends 대신 Implements를 사용하지 않는다


- 타입 파라미터를 대체할 구체적인 타입

// 상위타입이거나 하위 또는 구현 클래스만 지정할 수 있다.


- 주의할 점

// 메소드의 중괄호 {} 안에서 타입 파라미터 변수로 사용 가능한 것은

상위 타입의 멤버(필드, 메소드)로 제한된다

// 하위 타입에만 있는 필드와 메소드는 사용할 수 없다.



 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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(1020);
        // 20은 자동 Boxing이 된다 (int->integer)
        System.out.println(result1);
        
        int result2 = Util.compare(4.53);
        // 4.5는 자동 Boxing이 된다 (double->Double)
        System.out.println(result2);
    }
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
package sec05.exam01_bounded_type;
 
public class Util {
    public static <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




Posted by 너래쟁이
: