Class FallbackStringToObjectConverter

  • All Implemented Interfaces:
    StringToObjectConverter

    class FallbackStringToObjectConverter
    extends java.lang.Object
    implements StringToObjectConverter
    FallbackStringToObjectConverter is a StringToObjectConverter that provides a fallback conversion strategy for converting from a String to a given target type by invoking a static factory method or factory constructor defined in the target type.

    Search Algorithm

    1. Search for a single, non-private static factory method in the target type that converts from a String to the target type. Use the factory method if present.
    2. Search for a single, non-private constructor in the target type that accepts a String. Use the constructor if present.

    If multiple suitable factory methods are discovered they will be ignored. If neither a single factory method nor a single constructor is found, this converter acts as a no-op.

    Since:
    5.1
    See Also:
    DefaultArgumentConverter
    • Field Detail

      • NULL_EXECUTABLE

        private static final java.util.function.Function<java.lang.String,​java.lang.Object> NULL_EXECUTABLE
        Implementation of the NULL Object Pattern.
      • factoryExecutableCache

        private static final java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,​java.util.function.Function<java.lang.String,​java.lang.Object>> factoryExecutableCache
        Cache for factory methods and factory constructors.

        Searches that do not find a factory method or constructor are tracked by the presence of a NULL_EXECUTABLE object stored in the map. This prevents the framework from repeatedly searching for things which are already known not to exist.

    • Constructor Detail

      • FallbackStringToObjectConverter

        FallbackStringToObjectConverter()
    • Method Detail

      • canConvert

        public boolean canConvert​(java.lang.Class<?> targetType)
        Description copied from interface: StringToObjectConverter
        Determine if this converter can convert from a String to the supplied target type (which is guaranteed to be a wrapper type for primitives — for example, Integer instead of int).
        Specified by:
        canConvert in interface StringToObjectConverter
      • convert

        public java.lang.Object convert​(java.lang.String source,
                                        java.lang.Class<?> targetType)
                                 throws java.lang.Exception
        Description copied from interface: StringToObjectConverter
        Convert the supplied String to the supplied target type (which is guaranteed to be a wrapper type for primitives — for example, Integer instead of int).
        Specified by:
        convert in interface StringToObjectConverter
        Throws:
        java.lang.Exception
      • findFactoryExecutable

        private static java.util.function.Function<java.lang.String,​java.lang.Object> findFactoryExecutable​(java.lang.Class<?> targetType)
      • findFactoryMethod

        private static java.lang.reflect.Method findFactoryMethod​(java.lang.Class<?> targetType)
      • findFactoryConstructor

        private static java.lang.reflect.Constructor<?> findFactoryConstructor​(java.lang.Class<?> targetType)
      • isNotPrivateAndAcceptsSingleStringArgument

        private static boolean isNotPrivateAndAcceptsSingleStringArgument​(java.lang.reflect.Executable executable)