class FallbackStringToObjectConverter extends java.lang.Object implements DefaultArgumentConverter.StringToObjectConverter
FallbackStringToObjectConverter
is a DefaultArgumentConverter.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.
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.
DefaultArgumentConverter
Modifier and Type | Class and Description |
---|---|
(package private) static class |
FallbackStringToObjectConverter.IsFactoryConstructor
Predicate that determines if the Constructor supplied to
FallbackStringToObjectConverter.IsFactoryConstructor.test(Constructor) is a non-private factory constructor for the
supplied FallbackStringToObjectConverter.IsFactoryConstructor.targetType . |
(package private) static class |
FallbackStringToObjectConverter.IsFactoryMethod
Predicate that determines if the Method supplied to
FallbackStringToObjectConverter.IsFactoryMethod.test(Method) is a non-private static factory method for the
supplied FallbackStringToObjectConverter.IsFactoryMethod.targetType . |
Modifier and Type | Field and Description |
---|---|
private static 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.
|
private static java.util.function.Function<java.lang.String,java.lang.Object> |
NULL_EXECUTABLE
Implementation of the NULL Object Pattern.
|
Constructor and Description |
---|
FallbackStringToObjectConverter() |
Modifier and Type | Method and Description |
---|---|
boolean |
canConvert(java.lang.Class<?> targetType) |
java.lang.Object |
convert(java.lang.String source,
java.lang.Class<?> targetType) |
private static java.lang.reflect.Constructor<?> |
findFactoryConstructor(java.lang.Class<?> targetType) |
private static java.util.function.Function<java.lang.String,java.lang.Object> |
findFactoryExecutable(java.lang.Class<?> targetType) |
private static java.lang.reflect.Method |
findFactoryMethod(java.lang.Class<?> targetType) |
private static boolean |
isNotPrivateAndAcceptsSingleStringArgument(java.lang.reflect.Executable executable) |
private static final java.util.function.Function<java.lang.String,java.lang.Object> NULL_EXECUTABLE
private static final java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.util.function.Function<java.lang.String,java.lang.Object>> factoryExecutableCache
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.
public boolean canConvert(java.lang.Class<?> targetType)
canConvert
in interface DefaultArgumentConverter.StringToObjectConverter
public java.lang.Object convert(java.lang.String source, java.lang.Class<?> targetType) throws java.lang.Exception
convert
in interface DefaultArgumentConverter.StringToObjectConverter
java.lang.Exception
private static java.util.function.Function<java.lang.String,java.lang.Object> findFactoryExecutable(java.lang.Class<?> targetType)
private static java.lang.reflect.Method findFactoryMethod(java.lang.Class<?> targetType)
private static java.lang.reflect.Constructor<?> findFactoryConstructor(java.lang.Class<?> targetType)
private static boolean isNotPrivateAndAcceptsSingleStringArgument(java.lang.reflect.Executable executable)