개발_웹/Java

Java | 제네릭 파라미터 타입 제한, 와일드카드 타입

zuyo 2019. 5. 10. 22:07
반응형

파라미터 타입 제한

제네릭의 파라미터 타입을 제한하고 싶을 때 사용
예를 들어, 숫자를 연산하는 제네릭 메소드는 매개값으로 Number 타입 또는 하위 클래스인 Byte, Short, Integer, Long, Double 의 인스턴스만 가져야 할 때 사용할 수 있다.

제한된 타입 파라미터를 선언하려면 타입 파라미터 뒤에 extends 키워드를 붙이고 상위 타입을 명시하면 된다. 상위 타입은 인터페이스도 가능하나 implements를 사용하지는 않는다.

public <T extends Number> int compare(T t1, T t2) {
    double v1 = t1.doubleValue();
    double v2 = t2.doubleValue();

    return Double.compare(v1, v2);
}

와일드 카드 타입

제네릭 타입을 매개값이나 리턴 타입으로 사용할 때 구체적인 타입 대신 와일드 카드를 다음과 같이 세 가지 형태로 사용할 수 있다.

<?> : 모든 클래스나 인터페이스 타입이 올 수 있다.
<? extends 상위 타입> : 상위 타입의 모든 하위 클래스 타입이 올 수 있다.
<? Super 하위 타입> : 하위 타입의 모든 상위 클래스 타입이 올 수 있다.

반응형