org.resthub.common.util.ClassUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of resthub-common Show documentation
Show all versions of resthub-common Show documentation
RESThub core include Embeded datasource, Generic Repository and Generic CRUD services
The newest version!
package org.resthub.common.util;
import org.springframework.aop.support.AopUtils;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* Utility class to work with classes.
*/
public abstract class ClassUtils {
/**
* Private constructor to prevent instantiation.
*/
private ClassUtils() {
}
public static Class> getGenericTypeFromBean(Object object) {
Class> clazz = object.getClass();
if (AopUtils.isAopProxy(object)) {
clazz = AopUtils.getTargetClass(object);
}
return getGenericType(clazz);
}
public static Class> getGenericType(Class> clazz) {
return getGenericType(clazz, 0);
}
/**
* Returns the generic type with the given index from the given {@link Class}.
* Scan all base classes until finding a generic type.
*
* @param clazz Class where seeking the generic type
* @param index index of the generic type to find in the actual type array
* @return the generic type
*/
public static Class> getGenericType(Class> clazz, int index) {
Type genericSuperclass = clazz.getGenericSuperclass();
if (genericSuperclass == null) {
return null;
}
Class> effectiveClass = clazz;
while (!(genericSuperclass instanceof ParameterizedType)) {
effectiveClass = effectiveClass.getSuperclass();
genericSuperclass = effectiveClass.getGenericSuperclass();
if (effectiveClass.equals(Object.class)) {
return null;
}
}
return (Class>) ((ParameterizedType) genericSuperclass).getActualTypeArguments()[index];
}
}