@SuppressWarnings("unchecked")
    public <T> Converter<T> getConverter(Class<T> targetClass) {
        Converter<T> converter = (Converter<T>) converterMap.get(
                ReflectionUtils.wrap(targetClass));
        if (converter == null && targetClass.isEnum()) {
            Converter<T> enumConverter = (Converter<T>) new EnumConverter<>(
                    targetClass.asSubclass(Enum.class));
            converter = (Converter<T>) converterMap.putIfAbsent(
                    targetClass, enumConverter);
            if (converter == null) {
                converter = enumConverter;
            }
        }
        return converter;
    }