public Class<?>[] genericsTypes(Class<?> superClazz) {

		Type type = getGenericSupertype(clazz, superClazz);

		List<Class<?>> types = new LinkedList<Class<?>>();
		if (type instanceof ParameterizedType) {
			Type[] paramTypes = ((ParameterizedType) type).getActualTypeArguments();
			types.addAll(evalTypesAsClasses(paramTypes));
		} else if (type instanceof GenericArrayType) {
			Type paramType = ((GenericArrayType) type).getGenericComponentType();
			types.add(evalTypesAsClasses(paramType).get(0));
		}

		return types.toArray(new Class<?>[types.size()]);
	}