code: @SuppressWarnings("all")
      private static <T> T toNonCollectionType(Object data, Class<T> nonCollectionType) {
          if (Collection.class.isAssignableFrom(nonCollectionType)) {
              throw new RuntimeException("API使用错误，本方法不支持将目标对象转为非集合类型");
          }
          if (data == null) {
              return Defaults.defaultValue(nonCollectionType);
          }
          if (data.getClass().isArray()) {
              data = ArrayUtil.toList(data);
          }
          if (data instanceof Collection) {
              Collection collection = (Collection) data;
              if (nonCollectionType == String.class) {
                  return (T) JSON.toJSONString(collection);
              }
              if (collection.isEmpty()) {
                  return null;
              }
              if (collection.size() >= 2) {
                  LOG.warn(new Throwable(String.format("集合 【 %s 】  的元素个数不只一个,我们只取出第一个做转换", data)));
              }
              for (Object element : collection) {
                  LOG.debug("集合的第一个元素会被转为目标类型");
                  return transferNonCollection(element, nonCollectionType);
              }
          } else {
              return transferNonCollection(data, nonCollectionType);
          }
          throw castFailedException(data, nonCollectionType);
      }
docs: 具有一定兼容性的类型转换/切换
  将一个未知类型转化为你想要的那个类型，它会宽容地做转换，比如map映射成bean，bean映射成map
  list的第一个元素映射成bean，list的第一个元素映射成map等等。
  如果入参是null，那么返回结果也是null
  
  @param nonCollectionType 目标类型，不允许是集合类型