[Java] 클래스에 정의된 제너릭(generic) 타입의 Class를 얻는 방법
- IT/PROGRAMMING
- 2019. 2. 12. 23:40
250x250
반응형
자바에서 클래스를 정의할 때, 제너릭(generic) 타입을 종종 사용하게 된다.
코딩을 하다보면 이 generic 타입이 어떤 클래스인지 알아야할 때가 있다.
방법은 자바 리플렉션을 이용하면 된다.
아래와 같이 ClassUtil 클래스에 2개 메서드를 작성하였다.
getGenericTypsClasses() 메서드는 generic 타입을 얻기위한 핵심 코드이며, 복수개로 정의된 generic 타입을 위하여 리스트로 반환한다.
getGenericTypsClass() 메서드는 원하는 위치(index)의 generic 타입을 얻기위하여 작성하였다.
public class ClassUtil {
/**
* 클래스에 정의된 generic 타입의 Class를 얻는다.
* @param clazz 클래스
* @return Generic 타입의 Class 리스트
*/
public static List<Class<?>> getGenericTypsClasses(Class<?> clazz) {
// 클래스에 정의된 generic 파라미터에서 클래스 얻기
Type[] genericTypes = ((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments();
return Arrays.stream(genericTypes)
.map(genericType -> {
try {
Class<?> genericClass = Class.forName(genericType.getTypeName());
return genericClass;
} catch (Exception e) {
throw new MediaRuntimeException(e);
}
})
.collect(Collectors.toList());
}
/**
* 클래스에 정의된 generic 타입의 Class를 얻는다.
* @param clazz 클래스
* @param index Generic 타입 정의 index
* @return Generic 타입의 Class
*/
public static Class<?> getGenericTypsClass(Class<?> clazz, int index) {
List<Class<?>> genericTypeList = ClassUtil.getGenericTypsClasses(clazz);
return genericTypeList.get(index);
}
}
반응형
'IT > PROGRAMMING' 카테고리의 다른 글
[Spring] spring-boot 버전 1.X와 2.X에서 Page 객체를 ObjectMapper(Jackson) 사용시 차이점 (0) | 2019.02.19 |
---|---|
[Spring] 웹어플리케이션의 Whitelabel 오류 페이지 비활성화 (0) | 2019.02.19 |
[Spring] @RequestMapping의 wildcard 패턴 **의 값을 배열로 얻기 (1) | 2019.02.09 |
[Java] IP주소가 loopback(127.0.0.1)인지 확인하는 방법 (0) | 2019.02.08 |
[Java] IP주소가 사설(private) 네트워크인지 확인하는 방법 (0) | 2019.02.08 |