반응형
제네릭 메서드의 타입 매개변수 선언은 반환타입 앞에서 이루어지며, 해당 메서드 내에서만
선언한 타입 매개변수를 사용할 수 있다.
class CortCat {
...
public <T> void add(T element) {
...
}
}
제네릭 메서드의 타입 매개변수는 제네릭 클래스의 타입 매개변수와 별개의 것이다.
즉, 아래와 같이 동일하게 T라는 타입 매개변수명을 사용한다 하더라도, 같은 알파벳 문자를 이름으로 사용하는 것일 뿐, 서로 다른 타입 매개변수로 간주된다.
class CordCat<T> { // 1 : 여기에서 선언한 타입 매개변수 T와
...
public <T> void add(T element) { // 2 : 여기에서 선언한 타입 매개변수 T는 서로 다른 것
...
}
}
또한, 클래스 타입 매개변수와 달리 메서드 타입 매개변수는 static 메서드에서도 선언하여 사용할 수 있다.
class CordCat {
...
static <T> int setPrice(T element) {
...
}
}
제네릭 메서드는 메서드가 호출되는 시점에서 제네릭 타입이 결정되므로,
제네릭 메서드를 정의하는 시점에서는 실제 어떤 타입이 입력 되는지 알 수 없기에
length()와 같은 String 클래스의 메서드는 제네릭 메서드를 정의하는 시점에 사용할 수 없다.
class CordCat {
public <T> void print(T item) {
System.out.println(item.length()); // 불가
}
}
하지만 모든 자바 클래스의 최상위 클래스인 Object 클래스의 메서드는 사용가능하다.
모든 클래스는 Object 클래스를 상속받기 때문인데 equals(), toString() 등이 Object 클래스의 메서드에 속한다.
class CordCat {
public <T> void getPrint(T item) {
System.out.println(item.equals("Cat")); // 가능
}
}
# 제네릭 메서드에서 사용 가능한 메서드
Object 클래스 메서드 : ex) equals(), toString() ;
그 외 메서드 : ex) String클래스 메서드_ length()
반응형
'Java > Simple code' 카테고리의 다른 글
Java 알고리즘 재귀함수에 대한 고민과 기록 (0) | 2023.01.25 |
---|---|
Java 숫자 반올림, 올림, 내림(Math)+ 소수점 n번째 자리에서 반올림 (0) | 2023.01.23 |
Java_제네릭(Generic) 클래스 (0) | 2023.01.23 |
Java Stream collect() (0) | 2023.01.23 |
Java list to stream, set to stream (0) | 2023.01.23 |