public class TypeFactory
extends java.lang.Object
implements java.io.Serializable
JavaType
instances,
given various inputs.
Instances of this class are accessible using ObjectMapper
as well as many objects it constructs (like
DeserializationConfig
and
SerializationConfig
)),
but usually those objects also
expose convenience methods (constructType
).
So, you can do for example:
JavaType stringType = mapper.constructType(String.class);However, more advanced methods are only exposed by factory so that you may need to use:
JavaType stringCollection = mapper.getTypeFactory().constructCollectionType(List.class, String.class);
Modifier and Type | Method and Description |
---|---|
void |
clearCache()
Method that will clear up any cached type definitions that may
be cached by this
TypeFactory instance. |
ArrayType |
constructArrayType(java.lang.Class<?> elementType)
Method for constructing an
ArrayType . |
ArrayType |
constructArrayType(JavaType elementType)
Method for constructing an
ArrayType . |
CollectionLikeType |
constructCollectionLikeType(java.lang.Class<?> collectionClass,
java.lang.Class<?> elementClass)
Method for constructing a
CollectionLikeType . |
CollectionLikeType |
constructCollectionLikeType(java.lang.Class<?> collectionClass,
JavaType elementType)
Method for constructing a
CollectionLikeType . |
CollectionType |
constructCollectionType(java.lang.Class<? extends java.util.Collection> collectionClass,
java.lang.Class<?> elementClass)
Method for constructing a
CollectionType . |
CollectionType |
constructCollectionType(java.lang.Class<? extends java.util.Collection> collectionClass,
JavaType elementType)
Method for constructing a
CollectionType . |
JavaType |
constructFromCanonical(java.lang.String canonical)
Factory method for constructing a
JavaType out of its canonical
representation (see ResolvedType.toCanonical() ). |
JavaType |
constructGeneralizedType(JavaType baseType,
java.lang.Class<?> superClass)
Method similar to
constructSpecializedType(com.fasterxml.jackson.databind.JavaType, java.lang.Class<?>) , but that creates a
less-specific type of given type. |
MapLikeType |
constructMapLikeType(java.lang.Class<?> mapClass,
java.lang.Class<?> keyClass,
java.lang.Class<?> valueClass)
Method for constructing a
MapLikeType instance |
MapLikeType |
constructMapLikeType(java.lang.Class<?> mapClass,
JavaType keyType,
JavaType valueType)
Method for constructing a
MapLikeType instance |
MapType |
constructMapType(java.lang.Class<? extends java.util.Map> mapClass,
java.lang.Class<?> keyClass,
java.lang.Class<?> valueClass)
Method for constructing a
MapType instance |
MapType |
constructMapType(java.lang.Class<? extends java.util.Map> mapClass,
JavaType keyType,
JavaType valueType)
Method for constructing a
MapType instance |
JavaType |
constructParametricType(java.lang.Class<?> parametrized,
java.lang.Class<?>... parameterClasses)
Factory method for constructing
JavaType that
represents a parameterized type. |
JavaType |
constructParametricType(java.lang.Class<?> rawType,
JavaType... parameterTypes)
Factory method for constructing
JavaType that
represents a parameterized type. |
JavaType |
constructParametrizedType(java.lang.Class<?> parametrized,
java.lang.Class<?> parametersFor,
java.lang.Class<?>... parameterClasses)
Deprecated.
since 2.9 Use
constructParametricType(Class,Class...) instead |
JavaType |
constructParametrizedType(java.lang.Class<?> parametrized,
java.lang.Class<?> parametersFor,
JavaType... parameterTypes)
Deprecated.
since 2.9 Use
constructParametricType(Class,JavaType...) instead |
CollectionLikeType |
constructRawCollectionLikeType(java.lang.Class<?> collectionClass)
Method that can be used to construct "raw" Collection-like type; meaning that its
parameterization is unknown.
|
CollectionType |
constructRawCollectionType(java.lang.Class<? extends java.util.Collection> collectionClass)
Method that can be used to construct "raw" Collection type; meaning that its
parameterization is unknown.
|
MapLikeType |
constructRawMapLikeType(java.lang.Class<?> mapClass)
Method that can be used to construct "raw" Map-like type; meaning that its
parameterization is unknown.
|
MapType |
constructRawMapType(java.lang.Class<? extends java.util.Map> mapClass)
Method that can be used to construct "raw" Map type; meaning that its
parameterization is unknown.
|
JavaType |
constructReferenceType(java.lang.Class<?> rawType,
JavaType referredType) |
JavaType |
constructSimpleType(java.lang.Class<?> rawType,
java.lang.Class<?> parameterTarget,
JavaType[] parameterTypes)
Deprecated.
Since 2.7
|
JavaType |
constructSimpleType(java.lang.Class<?> rawType,
JavaType[] parameterTypes)
Method for constructing a type instance with specified parameterization.
|
JavaType |
constructSpecializedType(JavaType baseType,
java.lang.Class<?> subclass)
Factory method for creating a subtype of given base type, as defined
by specified subclass; but retaining generic type information if any.
|
JavaType |
constructType(java.lang.reflect.Type type) |
JavaType |
constructType(java.lang.reflect.Type type,
java.lang.Class<?> contextClass)
Deprecated.
Since 2.7 (accidentally removed in 2.7.0; added back in 2.7.1)
|
JavaType |
constructType(java.lang.reflect.Type type,
JavaType contextType)
Deprecated.
Since 2.7 (accidentally removed in 2.7.0; added back in 2.7.1)
|
JavaType |
constructType(TypeReference<?> typeRef) |
JavaType |
constructType(java.lang.reflect.Type type,
TypeBindings bindings) |
static TypeFactory |
defaultInstance()
Method used to access the globally shared instance, which has
no custom configuration.
|
java.lang.Class<?> |
findClass(java.lang.String className)
Low-level lookup method moved from
ClassUtil ,
to allow for overriding of lookup functionality in environments like OSGi. |
JavaType[] |
findTypeParameters(java.lang.Class<?> clz,
java.lang.Class<?> expType)
Deprecated.
Since 2.7 resolve raw type first, then find type parameters
|
JavaType[] |
findTypeParameters(java.lang.Class<?> clz,
java.lang.Class<?> expType,
TypeBindings bindings)
Deprecated.
Since 2.7 resolve raw type first, then find type parameters
|
JavaType[] |
findTypeParameters(JavaType type,
java.lang.Class<?> expType)
Method that is to figure out actual type parameters that given
class binds to generic types defined by given (generic)
interface or class.
|
java.lang.ClassLoader |
getClassLoader() |
JavaType |
moreSpecificType(JavaType type1,
JavaType type2)
Method that can be called to figure out more specific of two
types (if they are related; that is, one implements or extends the
other); or if not related, return the primary type.
|
static java.lang.Class<?> |
rawClass(java.lang.reflect.Type t)
Static helper method that can be called to figure out type-erased
call for given JDK type.
|
JavaType |
uncheckedSimpleType(java.lang.Class<?> cls)
Deprecated.
Since 2.8, to indicate users should never call this method.
|
static JavaType |
unknownType()
Method for constructing a marker type that indicates missing generic
type information, which is handled same as simple type for
java.lang.Object . |
TypeFactory |
withCache(LRUMap<java.lang.Object,JavaType> cache)
Mutant factory method that will construct new
TypeFactory with
identical settings except for different cache; most likely one with
bigger maximum size. |
TypeFactory |
withClassLoader(java.lang.ClassLoader classLoader)
"Mutant factory" method which will construct a new instance with specified
ClassLoader to use by findClass(java.lang.String) . |
TypeFactory |
withModifier(TypeModifier mod)
"Mutant factory" method which will construct a new instance with specified
TypeModifier added as the first modifier to call (in case there
are multiple registered). |
public TypeFactory withModifier(TypeModifier mod)
TypeModifier
added as the first modifier to call (in case there
are multiple registered).public TypeFactory withClassLoader(java.lang.ClassLoader classLoader)
ClassLoader
to use by findClass(java.lang.String)
.public TypeFactory withCache(LRUMap<java.lang.Object,JavaType> cache)
TypeFactory
with
identical settings except for different cache; most likely one with
bigger maximum size.public static TypeFactory defaultInstance()
ObjectMapper
to
get the default factory when constructed.public void clearCache()
TypeFactory
instance.
This method should not be commonly used, that is, only use it
if you know there is a problem with retention of type definitions;
the most likely (and currently only known) problem is retention
of Class
instances via JavaType
reference.public java.lang.ClassLoader getClassLoader()
public static JavaType unknownType()
java.lang.Object
.public static java.lang.Class<?> rawClass(java.lang.reflect.Type t)
public java.lang.Class<?> findClass(java.lang.String className) throws java.lang.ClassNotFoundException
ClassUtil
,
to allow for overriding of lookup functionality in environments like OSGi.java.lang.ClassNotFoundException
public JavaType constructSpecializedType(JavaType baseType, java.lang.Class<?> subclass)
HashMap.class
as subclass.public JavaType constructGeneralizedType(JavaType baseType, java.lang.Class<?> superClass)
constructSpecializedType(com.fasterxml.jackson.databind.JavaType, java.lang.Class<?>)
, but that creates a
less-specific type of given type. Usually this is as simple as simply
finding super-type with type erasure of superClass
, but
there may be need for some additional work-arounds.superClass
- public JavaType constructFromCanonical(java.lang.String canonical) throws java.lang.IllegalArgumentException
JavaType
out of its canonical
representation (see ResolvedType.toCanonical()
).canonical
- Canonical string representation of a typejava.lang.IllegalArgumentException
- If canonical representation is malformed,
or class that type represents (including its generic parameters) is
not foundpublic JavaType[] findTypeParameters(JavaType type, java.lang.Class<?> expType)
type
- Sub-type (leaf type) that implements expType
@Deprecated public JavaType[] findTypeParameters(java.lang.Class<?> clz, java.lang.Class<?> expType, TypeBindings bindings)
@Deprecated public JavaType[] findTypeParameters(java.lang.Class<?> clz, java.lang.Class<?> expType)
public JavaType moreSpecificType(JavaType type1, JavaType type2)
type1
- Primary type to considertype2
- Secondary type to considerpublic JavaType constructType(java.lang.reflect.Type type)
public JavaType constructType(java.lang.reflect.Type type, TypeBindings bindings)
public JavaType constructType(TypeReference<?> typeRef)
@Deprecated public JavaType constructType(java.lang.reflect.Type type, java.lang.Class<?> contextClass)
@Deprecated public JavaType constructType(java.lang.reflect.Type type, JavaType contextType)
public ArrayType constructArrayType(java.lang.Class<?> elementType)
ArrayType
.
NOTE: type modifiers are NOT called on array type itself; but are called for element type (and other contained types)
public ArrayType constructArrayType(JavaType elementType)
ArrayType
.
NOTE: type modifiers are NOT called on array type itself; but are called for contained types.
public CollectionType constructCollectionType(java.lang.Class<? extends java.util.Collection> collectionClass, java.lang.Class<?> elementClass)
CollectionType
.
NOTE: type modifiers are NOT called on Collection type itself; but are called for contained types.
public CollectionType constructCollectionType(java.lang.Class<? extends java.util.Collection> collectionClass, JavaType elementType)
CollectionType
.
NOTE: type modifiers are NOT called on Collection type itself; but are called for contained types.
public CollectionLikeType constructCollectionLikeType(java.lang.Class<?> collectionClass, java.lang.Class<?> elementClass)
CollectionLikeType
.
NOTE: type modifiers are NOT called on constructed type itself; but are called for contained types.
public CollectionLikeType constructCollectionLikeType(java.lang.Class<?> collectionClass, JavaType elementType)
CollectionLikeType
.
NOTE: type modifiers are NOT called on constructed type itself; but are called for contained types.
public MapType constructMapType(java.lang.Class<? extends java.util.Map> mapClass, java.lang.Class<?> keyClass, java.lang.Class<?> valueClass)
MapType
instance
NOTE: type modifiers are NOT called on constructed type itself; but are called for contained types.
public MapType constructMapType(java.lang.Class<? extends java.util.Map> mapClass, JavaType keyType, JavaType valueType)
MapType
instance
NOTE: type modifiers are NOT called on constructed type itself; but are called for contained types.
public MapLikeType constructMapLikeType(java.lang.Class<?> mapClass, java.lang.Class<?> keyClass, java.lang.Class<?> valueClass)
MapLikeType
instance
NOTE: type modifiers are NOT called on constructed type itself; but are called for contained types.
public MapLikeType constructMapLikeType(java.lang.Class<?> mapClass, JavaType keyType, JavaType valueType)
MapLikeType
instance
NOTE: type modifiers are NOT called on constructed type itself; but are called for contained types.
public JavaType constructSimpleType(java.lang.Class<?> rawType, JavaType[] parameterTypes)
NOTE: was briefly deprecated for 2.6.
@Deprecated public JavaType constructSimpleType(java.lang.Class<?> rawType, java.lang.Class<?> parameterTarget, JavaType[] parameterTypes)
public JavaType constructReferenceType(java.lang.Class<?> rawType, JavaType referredType)
@Deprecated public JavaType uncheckedSimpleType(java.lang.Class<?> cls)
Unchecked here not only means that no checks are made as to whether given class
might be non-simple type (like CollectionType
) but also that most of supertype
information is not gathered. This means that unless called on primitive types or
String
, results are probably not what you want to use.
public JavaType constructParametricType(java.lang.Class<?> parametrized, java.lang.Class<?>... parameterClasses)
JavaType
that
represents a parameterized type. For example, to represent
type List<Set<Integer>>
, you could
call
JavaType inner = TypeFactory.constructParametricType(Set.class, Set.class, Integer.class); return TypeFactory.constructParametricType(ArrayList.class, List.class, inner);
The reason for first two arguments to be separate is that parameterization may
apply to a super-type. For example, if generic type was instead to be
constructed for ArrayList<Integer>
, the usual call would be:
TypeFactory.constructParametricType(ArrayList.class, List.class, Integer.class);since parameterization is applied to
List
.
In most cases distinction does not matter, but there are types where it does;
one such example is parameterization of types that implement Iterator
.
NOTE: type modifiers are NOT called on constructed type.
parametrized
- Actual full typeparameterClasses
- Type parameters to applypublic JavaType constructParametricType(java.lang.Class<?> rawType, JavaType... parameterTypes)
JavaType
that
represents a parameterized type. For example, to represent
type List<Set<Integer>>
, you could call
JavaType inner = TypeFactory.constructParametricType(Set.class, Set.class, Integer.class); return TypeFactory.constructParametricType(ArrayList.class, List.class, inner);
The reason for first two arguments to be separate is that parameterization may
apply to a super-type. For example, if generic type was instead to be
constructed for ArrayList<Integer>
, the usual call would be:
TypeFactory.constructParametricType(ArrayList.class, List.class, Integer.class);since parameterization is applied to
List
.
In most cases distinction does not matter, but there are types where it does;
one such example is parameterization of types that implement Iterator
.
NOTE: type modifiers are NOT called on constructed type.
rawType
- Actual type-erased typeparameterTypes
- Type parameters to apply@Deprecated public JavaType constructParametrizedType(java.lang.Class<?> parametrized, java.lang.Class<?> parametersFor, JavaType... parameterTypes)
constructParametricType(Class,JavaType...)
instead@Deprecated public JavaType constructParametrizedType(java.lang.Class<?> parametrized, java.lang.Class<?> parametersFor, java.lang.Class<?>... parameterClasses)
constructParametricType(Class,Class...)
insteadpublic CollectionType constructRawCollectionType(java.lang.Class<? extends java.util.Collection> collectionClass)
Object.class
parameterization,
and is equivalent to calling:
typeFactory.constructCollectionType(collectionClass, typeFactory.unknownType());
This method should only be used if parameterization is completely unavailable.
public CollectionLikeType constructRawCollectionLikeType(java.lang.Class<?> collectionClass)
Object.class
parameterization,
and is equivalent to calling:
typeFactory.constructCollectionLikeType(collectionClass, typeFactory.unknownType());
This method should only be used if parameterization is completely unavailable.
public MapType constructRawMapType(java.lang.Class<? extends java.util.Map> mapClass)
Object.class
parameterization,
and is equivalent to calling:
typeFactory.constructMapType(collectionClass, typeFactory.unknownType(), typeFactory.unknownType());
This method should only be used if parameterization is completely unavailable.
public MapLikeType constructRawMapLikeType(java.lang.Class<?> mapClass)
Object.class
parameterization,
and is equivalent to calling:
typeFactory.constructMapLikeType(collectionClass, typeFactory.unknownType(), typeFactory.unknownType());
This method should only be used if parameterization is completely unavailable.
Copyright © 2010 - 2020 Adobe. All Rights Reserved