com.github.antelopeframework.util.GenericUtil Maven / Gradle / Ivy
The newest version!
package com.github.antelopeframework.util;
import java.lang.reflect.Array;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.WildcardType;
import java.util.List;
/**
* @see jp.sf.amateras.mirage.util.GenericUtil
*/
public abstract class GenericUtil {
private GenericUtil() { }
public static boolean isTypeOf(final Type type, final Class> clazz) {
if (Class.class.isInstance(type)) {
return clazz.isAssignableFrom(Class.class.cast(type));
}
if (ParameterizedType.class.isInstance(type)) {
final ParameterizedType parameterizedType = ParameterizedType.class.cast(type);
return isTypeOf(parameterizedType.getRawType(), clazz);
}
return false;
}
public static Class> getRawClass(final Type type) {
if (Class.class.isInstance(type)) {
return Class.class.cast(type);
}
if (ParameterizedType.class.isInstance(type)) {
final ParameterizedType parameterizedType = ParameterizedType.class.cast(type);
return getRawClass(parameterizedType.getRawType());
}
if (WildcardType.class.isInstance(type)) {
final WildcardType wildcardType = WildcardType.class.cast(type);
final Type[] types = wildcardType.getUpperBounds();
return getRawClass(types[0]);
}
if (GenericArrayType.class.isInstance(type)) {
final GenericArrayType genericArrayType = GenericArrayType.class.cast(type);
final Class> rawClass = getRawClass(genericArrayType.getGenericComponentType());
return Array.newInstance(rawClass, 0).getClass();
}
return null;
}
public static Type[] getGenericParameter(final Type type) {
if (ParameterizedType.class.isInstance(type)) {
return ParameterizedType.class.cast(type).getActualTypeArguments();
}
if (GenericArrayType.class.isInstance(type)) {
return getGenericParameter(GenericArrayType.class.cast(type).getGenericComponentType());
}
return null;
}
public static Type getGenericParameter(final Type type, final int index) {
if (!ParameterizedType.class.isInstance(type)) {
return null;
}
final Type[] genericParameter = getGenericParameter(type);
if (genericParameter == null) {
return null;
}
return genericParameter[index];
}
public static Type getElementTypeOfList(final Type type) {
if (!isTypeOf(type, List.class)) {
return null;
}
return getGenericParameter(type, 0);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy