public static void checkArray(Object[] data, Class<?> outType, Checkable checkable)
     throws CheckableDataException {
   checkIsNull(data, checkable);
   int length = data.length;
   if (checkable.maxLength() != -1 && length > checkable.maxLength()) {
     String message =
         StringUtils.unite(
             "[",
             data,
             "] length is ",
             length,
             " claim array max length ",
             checkable.maxLength(),
             ". data check failed!");
     throw new CheckableDataException(message);
   }
   if (checkable.minLength() != -1 && length < checkable.minLength()) {
     String message =
         StringUtils.unite(
             "[",
             data,
             "] length is ",
             length,
             " claim array min length ",
             checkable.minLength(),
             ". data check failed!");
     throw new CheckableDataException(message);
   }
   for (int i = 0; i < length; i++) {
     String tmp = ConvertUtil.toString(data[i]);
     if (outType == String[].class) {
       checkString(tmp, checkable);
     } else if (outType == Integer[].class || outType == int[].class) {
       checkInteger(tmp, checkable);
     } else if (outType == Double[].class || outType == double[].class) {
       checkDouble(tmp, checkable);
     } else if (outType == Float[].class || outType == float[].class) {
       checkFloat(tmp, checkable);
     } else if (outType == Date[].class) {
       checkDate(tmp, checkable);
     } else {
       checkObject(data[i], outType.getComponentType(), checkable);
     }
   }
 }
 public static void checkString(String data, Checkable checkable) throws CheckableDataException {
   checkIsNull(data, checkable);
   int length = data.length();
   if (checkable.maxLength() != -1 && length > checkable.maxLength()) {
     String message =
         StringUtils.unite(
             "[",
             data,
             "] length is ",
             length,
             " claim max length ",
             checkable.maxLength(),
             ". data check failed!");
     throw new CheckableDataException(message);
   }
   if (checkable.minLength() != -1 && length < checkable.minLength()) {
     String message =
         StringUtils.unite(
             "[",
             data,
             "] length is ",
             length,
             " claim min length ",
             checkable.minLength(),
             ". data check failed!");
     throw new CheckableDataException(message);
   }
   if (StringUtils.isNotEmpty(checkable.regex())) {
     Pattern pattern = Pattern.compile(checkable.regex());
     Matcher matcher = pattern.matcher(data);
     if (!matcher.matches()) {
       String message =
           StringUtils.unite("[", data, "] claim regex does not pass. data check failed!");
       throw new CheckableDataException(message);
     }
   }
 }