[java] 런타임 시점에서의 제네릭 타입 확인하기
자바에서는 제네릭 타입이 런타임에는 소거됩니다. 따라서 런타임에 제네릭 타입을 확인해야 하는 경우가 종종 있습니다. 이런 경우, reflection(리플렉션)을 사용하여 제네릭 타입을 확인할 수 있습니다.
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class GenericClass<T> {
private Class<T> type;
public GenericClass() {
Class<?> clazz = getClass();
if (clazz.getGenericSuperclass() instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) clazz.getGenericSuperclass();
Type[] typeArguments = parameterizedType.getActualTypeArguments();
if (typeArguments.length > 0 && typeArguments[0] instanceof Class) {
type = (Class<T>) typeArguments[0];
}
}
}
public Class<T> getType() {
return type;
}
}
위의 코드는 ParameterizedType을 사용하여 런타임 시점에서 제네릭 타입을 확인하는 예제입니다.
이제 GenericClass를 상속받는 클래스에서 getType() 메서드를 호출하면 그 클래스의 제네릭 타입을 확인할 수 있습니다.
public class StringGenericClass extends GenericClass<String> {
public static void main(String[] args) {
StringGenericClass stringGenericClass = new StringGenericClass();
System.out.println(stringGenericClass.getType()); // 출력: class java.lang.String
}
}
이렇게 하면 런타임 시점에서 제네릭 타입을 확인할 수 있으며, 이를 통해 동적으로 제네릭 타입을 다루는 코드를 작성할 수 있습니다.