docs: public static Type createClassType(final Type type, final Type declaringType0) {
          if (isClassType(type)) return type;
          if (type instanceof ParameterizedType) {  // e.g. Map<String, String>
              final ParameterizedType pt = (ParameterizedType) type;
              final Type[] paramTypes = pt.getActualTypeArguments();
              for (int i = 0; i < paramTypes.length; i++) {
                  paramTypes[i] = createClassType(paramTypes[i], declaringType0);
              }
              return createParameterizedType(pt.getOwnerType(), pt.getRawType(), paramTypes);
          }
          Type declaringType = declaringType0;
          if (declaringType instanceof Class) {
              do {
                  declaringType = ((Class) declaringType).getGenericSuperclass();
                  if (declaringType == Object.class) return Object.class;
              } while (declaringType instanceof Class);
          }
          //存在通配符则declaringType 必须是 ParameterizedType
          if (!(declaringType instanceof ParameterizedType)) return Object.class;
          final ParameterizedType declaringPType = (ParameterizedType) declaringType;
          final Type[] virTypes = ((Class) declaringPType.getRawType()).getTypeParameters();
          final Type[] desTypes = declaringPType.getActualTypeArguments();
          if (type instanceof WildcardType) {   // e.g. <? extends Serializable>
              final WildcardType wt = (WildcardType) type;
              for (Type f : wt.getUpperBounds()) {
                  for (int i = 0; i < virTypes.length; i++) {
                      if (virTypes[i].equals(f)) return desTypes.length <= i ? Object.class : desTypes[i];
                  }
              }
          } else if (type instanceof TypeVariable) { // e.g.  <? extends E>
              for (int i = 0; i < virTypes.length; i++) {
                  if (virTypes[i].equals(type)) return desTypes.length <= i ? Object.class : desTypes[i];
              }
          }
          return type;
      }