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.StringToObjectConverterpublic java.lang.Object convert(java.lang.String source,
java.lang.Class<?> targetType)
throws java.lang.Exception
convert in interface DefaultArgumentConverter.StringToObjectConverterjava.lang.Exceptionprivate 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)