@SuppressWarnings("cast") private static Converter tryToCreateStringConverter(Class targetType) { if (targetType.getEnumConstants() != null) return new String2EnumConverter(targetType); else if (targetType == Boolean.class) return new String2BooleanConverter(); else if (Number.class.isAssignableFrom(targetType)) { if (targetType != Number.class) return new String2NumberConverter((Class<Number>) targetType); else return new String2NumberConverter(Double.class); } else if (targetType.isArray()) { Class componentType = targetType.getComponentType(); if (componentType == byte.class) return new String2ByteArrayConverter(); else return new CommaSeparatedListConverter(componentType); } return null; }