Java tutorial
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public abstract class ClassUtils { static public ParameterizedType getParameterizedType(Class<?> target) { Type[] types = getGenericType(target); if (types.length > 0 && types[0] instanceof ParameterizedType) { return (ParameterizedType) types[0]; } return null; } static public Type[] getParameterizedTypes(Class<?> target) { Type[] types = getGenericType(target); if (types.length > 0 && types[0] instanceof ParameterizedType) { return ((ParameterizedType) types[0]).getActualTypeArguments(); } return null; } static public Type[] getGenericType(Class<?> target) { if (target == null) return new Type[0]; Type[] types = target.getGenericInterfaces(); if (types.length > 0) { return types; } Type type = target.getGenericSuperclass(); if (type != null) { if (type instanceof ParameterizedType) { return new Type[] { type }; } } return new Type[0]; } }