docs: @SuppressWarnings("unchecked")
  	public <T> T convert(Type type, Object value, T defaultValue, boolean isCustomFirst) throws ConvertException {
  		if (TypeUtil.isUnknow(type) && null == defaultValue) {
  			// 对于用户不指定目标类型的情况，返回原值
  			return (T) value;
  		}
  		if (ObjectUtil.isNull(value)) {
  			return defaultValue;
  		}
  		if (TypeUtil.isUnknow(type)) {
  			type = defaultValue.getClass();
  		}
  		
  		// 标准转换器
  		final Converter<T> converter = getConverter(type, isCustomFirst);
  		if (null != converter) {
  			return converter.convert(value, defaultValue);
  		}
  
  		Class<T> rowType = (Class<T>) TypeUtil.getClass(type);
  		if (null == rowType) {
  			if (null != defaultValue) {
  				rowType = (Class<T>) defaultValue.getClass();
  			} else {
  				// 无法识别的泛型类型，按照Object处理
  				return (T) value;
  			}
  		}
  		
  		// 特殊类型转换，包括Collection、Map、强转、Array等
  		final T result = convertSpecial(type, rowType, value, defaultValue);
  		if (null != result) {
  			return result;
  		}
  		
  		// 尝试转Bean
  		if (BeanUtil.isBean(rowType)) {
  			return new BeanConverter<T>(type).convert(value, defaultValue);
  		}
  		
  		// 无法转换
  		throw new ConvertException("No Converter for type [{}]", rowType.getName());
  	}