static Type resolveTypeVariable(Type context, Class<?> contextRawType, TypeVariable<?> unknown) {
        Class<?> declaredByRaw = declaringClassOf(unknown);

        // we can't reduce this further
        if (declaredByRaw == null) {
            return unknown;
        }

        Type declaredBy = getGenericSupertype(context, contextRawType, declaredByRaw);
        if (declaredBy instanceof ParameterizedType) {
            int index = indexOf(declaredByRaw.getTypeParameters(), unknown);
            return ((ParameterizedType) declaredBy).getActualTypeArguments()[index];
        }

        return unknown;
    }
Returns the generic supertype for {@code supertype}. For example, given a class {@code
IntegerSet}, the result for when supertype is {@code Set.class} is {@code Set<Integer>} and the
result when the supertype is {@code Collection.class} is {@code Collection<Integer>}.
core/src/main/java/com/alibaba/fastjson2/util/BeanUtils.java