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];
}
}