public class SimpleAbstractTypeResolver extends AbstractTypeResolver
AbstractTypeResolver implementation, which is
based on static mapping from abstract super types into
sub types (concrete or abstract), but retaining generic
parameterization.
Can be used for things like specifying which implementation of
Collection to use:
SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver(); // To make all properties declared as Collection, List, to LinkedList resolver.addMapping(Collection.class, LinkedList.class); resolver.addMapping(List.class, LinkedList.class);Can also be used as an alternative to per-class annotations when defining concrete implementations; however, only works with abstract types (since this is only called for abstract types)
| Modifier and Type | Field and Description |
|---|---|
protected HashMap<ClassKey,Class<?>> |
_mappings
Mappings from super types to subtypes
|
| Constructor and Description |
|---|
SimpleAbstractTypeResolver() |
| Modifier and Type | Method and Description |
|---|---|
<T> SimpleAbstractTypeResolver |
addMapping(Class<T> superType,
Class<? extends T> subType)
Method for adding a mapping from super type to specific subtype.
|
JavaType |
findTypeMapping(DeserializationConfig config,
JavaType type)
Try to locate a subtype for given abstract type, to either resolve
to a concrete type, or at least to a more-specific (and hopefully supported)
abstract type, one which may have registered deserializers.
|
JavaType |
resolveAbstractType(DeserializationConfig config,
JavaType type)
Method called to try to resolve an abstract type into
concrete type (usually for purposes of deserializing),
when no concrete implementation was found.
|
public <T> SimpleAbstractTypeResolver addMapping(Class<T> superType, Class<? extends T> subType)
superType
is abstract (since resolver is never called for concrete classes);
as well as to ensure that there is supertype/subtype relationship
(to ensure there won't be cycles during resolution).superType - Abstract type to resolvesubType - Sub-class of superType, to map superTo topublic JavaType findTypeMapping(DeserializationConfig config, JavaType type)
AbstractTypeResolverLists).
Note that this method does not necessarily have to do full resolution of bindings; that is, it is legal to return type that could be further resolved: caller is expected to keep calling this method on registered resolvers, until a concrete type is located.
findTypeMapping in class AbstractTypeResolverconfig - Configuration in use; should always be of type
DeserializationConfigpublic JavaType resolveAbstractType(DeserializationConfig config, JavaType type)
AbstractTypeResolverresolveAbstractType in class AbstractTypeResolverconfig - Configuration in use; should always be of type
DeserializationConfigtype - Type for which materialization maybe needed