class ReflectUtils {

	/**
	 * 获得类的所有基类和接口
	 * 
	 * @param clazz 类
	 * @return 所有基类的集合
	 */
	public static Set<Class<?>> getAllSuperType(Class clazz) {
		return ReflectionUtils.getAllSuperTypes(clazz);
	}

	/**
	 * 是否继承某个基类
	 * 
	 * @param childClazz
	 *            子类
	 * @param superClazz
	 *            基类
	 * @return 是否继承某个基类
	 */
	public static boolean haveSuperType(Class childClazz, Class superClazz) {
		for (Class<?> clazz : getAllSuperType(childClazz)) {
			if (clazz.equals(superClazz)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 是否继承某个基类
	 * 
	 * @param bean 需要判断的对象bean
	 * @param superClazz 基类
	 * @return 是否继承某个基类
	 */
	public static boolean haveSuperType(Object bean, Class superClazz) {
		return haveSuperType(bean.getClass(), superClazz);
	}

	public static Class getGenericClass(Type type, int i) {
		if (type instanceof ParameterizedType) { // 处理泛型类型
			return getGenericClass((ParameterizedType) type, i);
		} else if (type instanceof TypeVariable) { // 处理泛型擦拭对象
			return getGenericClass(((TypeVariable) type).getBounds()[0], 0);
		} else {// class本身也是type，强制转型
			return (Class) type;
		}
	}

	private static Class getGenericClass(ParameterizedType parameterizedType, int i) {<FILL_FUNCTION_BODY>}

}

		Object genericClass = parameterizedType.getActualTypeArguments()[i];
		if (genericClass instanceof ParameterizedType) { // 处理多级泛型
			return (Class) ((ParameterizedType) genericClass).getRawType();
		} else if (genericClass instanceof GenericArrayType) { // 处理数组泛型
			return (Class) ((GenericArrayType) genericClass).getGenericComponentType();
		} else if (genericClass instanceof TypeVariable) { // 处理泛型擦拭对象
			return getGenericClass(((TypeVariable) genericClass).getBounds()[0], 0);
		} else {
			return (Class) genericClass;
		}
	
<no_super_class>