public abstract class JavaType extends ResolvedType implements Serializable, Type
Instances can (only) be constructed by
com.fasterxml.jackson.databind.type.TypeFactory
.
Since 2.2 this implements Type
to allow
it to be pushed through interfaces that only expose that type.
Modifier and Type | Field and Description |
---|---|
protected boolean |
_asStatic
Whether entities defined with this type should be handled using
static typing (as opposed to dynamic runtime type) or not.
|
protected Class<?> |
_class
This is the nominal type-erased Class that would be close to the
type represented (but not exactly type, due to type erasure: type
instance may have more information on this).
|
protected int |
_hash |
protected Object |
_typeHandler
Optional handler that can be attached to indicate how to handle
additional type metadata associated with this type.
|
protected Object |
_valueHandler
Optional handler (codec) that can be attached to indicate
what to use for handling (serializing, deserializing) values of
this specific type.
|
Modifier | Constructor and Description |
---|---|
protected |
JavaType(Class<?> raw,
int additionalHash,
Object valueHandler,
Object typeHandler,
boolean asStatic) |
Modifier and Type | Method and Description |
---|---|
protected void |
_assertSubclass(Class<?> subclass,
Class<?> superClass) |
protected abstract JavaType |
_narrow(Class<?> subclass) |
protected JavaType |
_widen(Class<?> superclass)
Default implementation is just to call
_narrow(java.lang.Class<?>) , since
underlying type construction is usually identical |
JavaType |
containedType(int index)
Method for accessing definitions of contained ("child")
types.
|
int |
containedTypeCount()
Method for checking how many contained types this type
has.
|
String |
containedTypeName(int index)
Method for accessing name of type variable in indicated
position.
|
JavaType |
containedTypeOrUnknown(int index)
Convenience method that is functionally same as:
JavaType t = containedType(index);
if (t == null) {
t = TypeFactory.unknownType();
}
and typically used to eliminate need for null checks for common case
where we just want to check if containedType is available first; and
if not, use "unknown type" (which translates to java.lang.Object
basically). |
abstract boolean |
equals(Object o) |
JavaType |
forcedNarrowBy(Class<?> subclass)
More efficient version of
narrowBy(java.lang.Class<?>) , called by
internal framework in cases where compatibility checks
are to be skipped. |
JavaType |
getContentType()
Method for accessing content type of this type, if type has
such a thing: simple types do not, structured types do
(like arrays, Collections and Maps)
|
String |
getErasedSignature()
Method for accessing signature without generic
type information, in form compatible with all versions
of JVM, and specifically used for type descriptions
when generating byte code.
|
abstract StringBuilder |
getErasedSignature(StringBuilder sb)
Method for accessing signature without generic
type information, in form compatible with all versions
of JVM, and specifically used for type descriptions
when generating byte code.
|
String |
getGenericSignature()
Method for accessing signature that contains generic
type information, in form compatible with JVM 1.5
as per JLS.
|
abstract StringBuilder |
getGenericSignature(StringBuilder sb) |
JavaType |
getKeyType()
Method for accessing key type for this type, assuming type
has such a concept (only Map types do)
|
abstract Class<?> |
getParameterSource()
Accessor that can be used to find out type for which parameterization
is applied: this is often NOT same as what
ResolvedType.getRawClass() returns,
but rather one of it supertype. |
Class<?> |
getRawClass()
Accessor for type-erased
Class of resolved type. |
<T> T |
getTypeHandler()
Method for accessing type handler associated with this type, if any
|
<T> T |
getValueHandler()
Method for accessing value handler associated with this type, if any
|
boolean |
hasGenericTypes()
Method that can be used to find out if the type directly declares generic
parameters (for its direct super-class and/or super-interfaces).
|
int |
hashCode() |
boolean |
hasRawClass(Class<?> clz)
Method that can be used to check whether this type has
specified Class as its type erasure.
|
boolean |
isAbstract() |
boolean |
isArrayType() |
boolean |
isCollectionLikeType() |
boolean |
isConcrete()
Convenience method for checking whether underlying Java type
is a concrete class or not: abstract classes and interfaces
are not.
|
abstract boolean |
isContainerType() |
boolean |
isEnumType() |
boolean |
isFinal() |
boolean |
isInterface() |
boolean |
isJavaLangObject()
Convenience method, short-hand for
getRawClass() == Object.class
and used to figure if we basically have "untyped" type object. |
boolean |
isMapLikeType() |
boolean |
isPrimitive() |
boolean |
isThrowable() |
JavaType |
narrowBy(Class<?> subclass)
Method that can be called to do a "narrowing" conversions; that is,
to return a type with a raw class that is assignable to the raw
class of this type.
|
abstract JavaType |
narrowContentsBy(Class<?> contentClass) |
abstract String |
toString() |
boolean |
useStaticType()
Accessor for checking whether handlers for dealing with values of
this type should use static typing (as opposed to dynamic typing).
|
JavaType |
widenBy(Class<?> superclass)
Method that can be called to do a "widening" conversions; that is,
to return a type with a raw class that could be assigned from this
type.
|
abstract JavaType |
widenContentsBy(Class<?> contentClass) |
abstract JavaType |
withContentTypeHandler(Object h)
"Copy method" that will construct a new instance that is identical to
this instance, except that its content type will have specified
type handler assigned.
|
abstract JavaType |
withContentValueHandler(Object h)
"Copy method" that will construct a new instance that is identical to
this instance, except that it will have specified content value handler assigned.
|
abstract JavaType |
withStaticTyping()
Method that can be called to get a type instance that indicates
that values of the type should be handled using "static typing" for purposes
of serialization (as opposed to "dynamic" aka runtime typing):
meaning that no runtime information is needed for determining serializers to use.
|
abstract JavaType |
withTypeHandler(Object h)
"Copy method" that will construct a new instance that is identical to
this instance, except that it will have specified type handler assigned.
|
abstract JavaType |
withValueHandler(Object h)
"Copy method" that will construct a new instance that is identical to
this instance, except that it will have specified value handler assigned.
|
toCanonical
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
getTypeName
protected final Class<?> _class
protected final int _hash
protected final Object _valueHandler
Note: untyped (i.e. caller has to cast) because it is used for different kinds of handlers, with unrelated types.
protected final Object _typeHandler
Note: untyped (i.e. caller has to cast) because it is used for different kinds of handlers, with unrelated types.
protected final boolean _asStatic
public abstract JavaType withTypeHandler(Object h)
public abstract JavaType withContentTypeHandler(Object h)
public abstract JavaType withValueHandler(Object h)
public abstract JavaType withContentValueHandler(Object h)
public abstract JavaType withStaticTyping()
public JavaType narrowBy(Class<?> subclass)
IllegalArgumentException
is thrown.
If class is same as the current raw class, instance itself is
returned.public JavaType forcedNarrowBy(Class<?> subclass)
narrowBy(java.lang.Class<?>)
, called by
internal framework in cases where compatibility checks
are to be skipped.public JavaType widenBy(Class<?> superclass)
IllegalArgumentException
is thrown.
If class is same as the current raw class, instance itself is
returned.protected JavaType _widen(Class<?> superclass)
Default implementation is just to call _narrow(java.lang.Class<?>)
, since
underlying type construction is usually identical
public final Class<?> getRawClass()
ResolvedType
Class
of resolved type.getRawClass
in class ResolvedType
public final boolean hasRawClass(Class<?> clz)
hasRawClass
in class ResolvedType
public boolean isAbstract()
isAbstract
in class ResolvedType
public boolean isConcrete()
isConcrete
in class ResolvedType
public boolean isThrowable()
isThrowable
in class ResolvedType
public boolean isArrayType()
isArrayType
in class ResolvedType
public final boolean isEnumType()
isEnumType
in class ResolvedType
public final boolean isInterface()
isInterface
in class ResolvedType
public final boolean isPrimitive()
isPrimitive
in class ResolvedType
public final boolean isFinal()
isFinal
in class ResolvedType
public abstract boolean isContainerType()
isContainerType
in class ResolvedType
public boolean isCollectionLikeType()
isCollectionLikeType
in class ResolvedType
Collection
type,
or something similar (meaning it has at least one type parameter,
which describes type of contents)public boolean isMapLikeType()
isMapLikeType
in class ResolvedType
Map
type,
or something similar (meaning it has at least two type parameter;
first one describing key type, second value type)public final boolean isJavaLangObject()
getRawClass() == Object.class
and used to figure if we basically have "untyped" type object.public final boolean useStaticType()
public boolean hasGenericTypes()
ResolvedType
hasGenericTypes
in class ResolvedType
public JavaType getKeyType()
ResolvedType
getKeyType
in class ResolvedType
public JavaType getContentType()
ResolvedType
getContentType
in class ResolvedType
public int containedTypeCount()
ResolvedType
containedTypeCount
in class ResolvedType
public JavaType containedType(int index)
ResolvedType
containedType
in class ResolvedType
index
- Index of contained type to returnpublic String containedTypeName(int index)
ResolvedType
containedTypeName
in class ResolvedType
index
- Index of contained type to returnpublic abstract Class<?> getParameterSource()
ResolvedType
ResolvedType.getRawClass()
returns,
but rather one of it supertype.
For example: for type like HashMap
, raw type is
HashMap
; but this method would return
Map
, because relevant type parameters that are
resolved (and accessible using ResolvedType.containedType(int)
and
ResolvedType.getKeyType()
) are parameter for Map
(which may or may not be same as type parameters for subtype;
in case of HashMap
they are, but for further
subtypes they may be different parameters or possibly none at all).
getParameterSource
in class ResolvedType
public JavaType containedTypeOrUnknown(int index)
JavaType t = containedType(index);
if (t == null) {
t = TypeFactory.unknownType();
}
and typically used to eliminate need for null checks for common case
where we just want to check if containedType is available first; and
if not, use "unknown type" (which translates to java.lang.Object
basically).public <T> T getValueHandler()
public <T> T getTypeHandler()
public String getGenericSignature()
getErasedSignature()
,
in that generic information can be automatically removed
if necessary (just remove outermost
angle brackets along with content inside)public abstract StringBuilder getGenericSignature(StringBuilder sb)
sb
- StringBuilder to append signature topublic String getErasedSignature()
public abstract StringBuilder getErasedSignature(StringBuilder sb)
sb
- StringBuilder to append signature toCopyright © 2016 JBoss by Red Hat. All rights reserved.