모든 타입으로 대체할 수 없고, 특정 타입과 자식 또는 구현 관계에 있는 타입만 대체할 수 있는 타입 파라미터를 제한된 타입 파라미터(Bounded type parameter) 라고 한다.
public <T extends 상위타입> 리턴타입 메소드(매개변수, ...) {...}
상위 타입은 클래스뿐만 아니라 인터페이스도 가능하다.
public static <T extends Number> boolean compare(T t1, T t2) {
double v1 = t1.doubleValue(); //Number의 doubleValue() 메소드 사용
double v2 = t2.doubleValue();
return (v1 == v2);
}
위 코드는 Number 타입과 자식 클래스(Byte, Short, Integer, Long, Double)에만 대체 가능한 타입 파라미터를 정의한 것이다.
타입 파라미터가 Number 타입으로 제한되면서 Object의 메소드뿐만 아니라 Number가 가지고 있는 메소드도 사용할 수 있다.
public class GenericExample {
//제한된 타입 파라미터를 갖는 제네릭 메소드
public static <T extends Number> boolean compare(T t1, T t2) {
//T의 타입을 출력
System.out.println("compare(" + t1.getClass().getSimpleName() + ", " +
t2.getClass().getSimpleName() + ")");
//Number의 메소드 사용
double v1 = t1.doubleValue();
double v2 = t2.doubleValue();
return (v1 == v2);
}
public static void main(String[] args) {
//제네릭 메소드 호출
boolean result1 = compare(10, 20);
System.out.println(result1);
System.out.println();
//제네릭 메소드 호출
boolean result2 = compare(4.5, 4.5);
System.out.println(result2);
}
}
compare(Integer, Integer)
false
compare(Double, Double)
true
728x90
728x90
'Java > 이것이 자바다' 카테고리의 다른 글
[이것이 자바다] 멀티 스레드 (0) | 2023.04.11 |
---|---|
[이것이 자바다] 와일드카드 타입 파라미터 (1) | 2023.04.03 |
[이것이 자바다] 제네릭 메소드 (1) | 2023.04.03 |
[이것이 자바다] 제네릭 타입 (1) | 2023.03.21 |
[이것이 자바다] 제네릭이란? (0) | 2023.03.15 |