public static boolean accepts(String value, Class<?> type, String typeArguments) {
   try {
     if (Integer.class.equals(type)) {
       Integer.parseInt(value);
     } else if (Double.class.equals(type)) {
       Double.parseDouble(value);
     } else if (EnumWrapper.class.equals(type)) {
       final EnumWrapper wrapper = EnumWrapper.getWrapper(typeArguments);
       return wrapper.matches(value);
     } else if (Boolean.class.equals(type)) {
       return ArrayUtils.contains(
           value.toLowerCase(), new String[] {"y", "n", "yes", "no", "true", "false"});
     } else if (TypedList.class.isAssignableFrom(type)) {
       final TypedList typeObject = (TypedList) type.newInstance();
       if (!value.matches("\\{.*?\\}")) {
         return accepts(value, typeObject.getType(), typeArguments);
       }
       value = value.substring(1, value.length() - 1);
       String token = "";
       while (!value.isEmpty()) {
         int pos = 0;
         Character quote = null;
         if ("\"'`".contains(Character.toString(value.charAt(0)))) {
           quote = value.charAt(0);
           pos++;
         }
         while (pos < value.length()) {
           if (value.substring(pos).startsWith("\\\\")
               || value.substring(pos).startsWith("\\\"")
               || value.substring(pos).startsWith("\\'")
               || value.substring(pos).startsWith("\\`")) {
             token += value.charAt(pos + 1);
             pos += 2;
             continue;
           }
           if (value.substring(pos).startsWith("\\n")) {
             token += "\n";
             pos += 2;
             continue;
           }
           if (value.substring(pos).startsWith("\\t")) {
             token += "\t";
             pos += 2;
             continue;
           }
           if (value.substring(pos).startsWith("\\r")) {
             token += "\r";
             pos += 2;
             continue;
           }
           token += value.charAt(pos);
           if (quote == null && token.endsWith(",")) {
             token = token.substring(0, token.length() - 1);
             break;
           }
           if (quote != null && !token.isEmpty() && token.charAt(token.length() - 1) == quote) {
             break;
           }
           pos++;
         }
         if (quote != null) {
           token = token.substring(0, token.length() - 1);
         }
         value = value.substring(token.length());
         if (!accepts(token, typeObject.getType(), typeArguments)) {
           System.out.println(token);
           return false;
         }
         if (!value.startsWith(",")) {
           token = value;
           break;
         } else {
           token = "";
         }
         value = value.substring(1);
       }
     }
   } catch (NumberFormatException e) {
     return false;
   } catch (InstantiationException e) {
     return false;
   } catch (IllegalAccessException e) {
     return false;
   }
   return true;
 }