Class JavaType

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.reflect.Type
    Direct Known Subclasses:
    TypeBase

    public abstract class JavaType
    extends com.fasterxml.jackson.core.type.ResolvedType
    implements java.io.Serializable, java.lang.reflect.Type
    Base class for type token classes used both to contain information and as keys for deserializers.

    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.

    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field 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 java.lang.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 java.lang.Object _typeHandler
      Optional handler that can be attached to indicate how to handle additional type metadata associated with this type.
      protected java.lang.Object _valueHandler
      Optional handler (codec) that can be attached to indicate what to use for handling (serializing, deserializing) values of this specific type.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected JavaType​(JavaType base)
      Copy-constructor used when refining/upgrading type instances.
      protected JavaType​(java.lang.Class<?> raw, int additionalHash, java.lang.Object valueHandler, java.lang.Object typeHandler, boolean asStatic)  
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      protected abstract JavaType _narrow​(java.lang.Class<?> subclass)
      Deprecated.
      abstract JavaType containedType​(int index)  
      abstract int containedTypeCount()  
      abstract java.lang.String containedTypeName​(int index)
      Deprecated.
      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​(java.lang.Object o)  
      abstract JavaType findSuperType​(java.lang.Class<?> erasedTarget)
      Method that may be called to find representation of given type within type hierarchy of this type: either this type (if this type has given erased type), one of its supertypes that has the erased types, or null if target is neither this type or any of its supertypes.
      abstract JavaType[] findTypeParameters​(java.lang.Class<?> expType)
      Method that may be used to find paramaterization this type has for given type-erased generic target type.
      JavaType forcedNarrowBy​(java.lang.Class<?> subclass)
      Deprecated.
      abstract TypeBindings getBindings()  
      JavaType getContentType()  
      java.lang.Object getContentTypeHandler()  
      java.lang.Object getContentValueHandler()  
      java.lang.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 java.lang.StringBuilder getErasedSignature​(java.lang.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.
      java.lang.String getGenericSignature()
      Method for accessing signature that contains generic type information, in form compatible with JVM 1.5 as per JLS.
      abstract java.lang.StringBuilder getGenericSignature​(java.lang.StringBuilder sb)  
      abstract java.util.List<JavaType> getInterfaces()
      Accessor for finding fully resolved interfaces this type implements, if any; empty array if none.
      JavaType getKeyType()  
      java.lang.Class<?> getParameterSource()
      Deprecated.
      java.lang.Class<?> getRawClass()  
      JavaType getReferencedType()  
      abstract JavaType getSuperClass()
      Accessor for finding fully resolved parent class of this type, if it has one; null if not.
      <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 hasContentType()
      Accessor that allows determining whether getContentType() should return a non-null value (that is, there is a "content type") or not.
      boolean hasGenericTypes()  
      boolean hasHandlers()
      Helper method that checks whether this type, or its (optional) key or content type has getValueHandler() or getTypeHandler(); that is, are there any non-standard handlers associated with this type object.
      int hashCode()  
      boolean hasRawClass​(java.lang.Class<?> clz)
      Method that can be used to check whether this type has specified Class as its type erasure.
      boolean hasValueHandler()  
      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 isEnumImplType()
      Similar to isEnumType() except does NOT return true for Enum (since that is not Enum implementation type).
      boolean isEnumType()
      Method that basically does equivalent of:
      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 isRecordType()  
      boolean isThrowable()  
      boolean isTypeOrSubTypeOf​(java.lang.Class<?> clz)  
      boolean isTypeOrSuperTypeOf​(java.lang.Class<?> clz)  
      abstract JavaType refine​(java.lang.Class<?> rawType, TypeBindings bindings, JavaType superClass, JavaType[] superInterfaces)
      Mutant factory method that will try to create and return a sub-type instance for known parameterized types; for other types will return `null` to indicate that no just refinement makes necessary sense, without trying to detect special status through implemented interfaces.
      abstract java.lang.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).
      abstract JavaType withContentType​(JavaType contentType)
      Mutant factory method that may be called on structured types that have a so-called content type (element of arrays, value type of Maps, referenced type of referential types), and will construct a new instance that is identical to this instance, except that it has specified content type, instead of current one.
      abstract JavaType withContentTypeHandler​(java.lang.Object h)
      Mutant factory method that will construct a new instance that is identical to this instance, except that it will have specified content type (element type for arrays, value type for Maps and so forth) handler assigned.
      abstract JavaType withContentValueHandler​(java.lang.Object h)
      Mutant factory method that will construct a new instance that is identical to this instance, except that it will have specified content value handler assigned.
      JavaType withHandlersFrom​(JavaType src)
      Mutant factory method that will try to copy handlers that the specified source type instance had, if any; this must be done recursively where necessary (as content types may be structured).
      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​(java.lang.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​(java.lang.Object h)
      Mutant factory method that will construct a new instance that is identical to this instance, except that it will have specified value handler assigned.
      • Methods inherited from class com.fasterxml.jackson.core.type.ResolvedType

        isReferenceType, toCanonical
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.lang.reflect.Type

        getTypeName
    • Field Detail

      • _class

        protected final java.lang.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). May be an interface or abstract class, so instantiation may not be possible.
      • _hash

        protected final int _hash
      • _valueHandler

        protected final java.lang.Object _valueHandler
        Optional handler (codec) that can be attached to indicate what to use for handling (serializing, deserializing) values of this specific type.

        Note: untyped (i.e. caller has to cast) because it is used for different kinds of handlers, with unrelated types.

      • _typeHandler

        protected final java.lang.Object _typeHandler
        Optional handler that can be attached to indicate how to handle additional type metadata associated with this type.

        Note: untyped (i.e. caller has to cast) because it is used for different kinds of handlers, with unrelated types.

      • _asStatic

        protected final boolean _asStatic
        Whether entities defined with this type should be handled using static typing (as opposed to dynamic runtime type) or not.
        Since:
        2.2
    • Constructor Detail

      • JavaType

        protected JavaType​(java.lang.Class<?> raw,
                           int additionalHash,
                           java.lang.Object valueHandler,
                           java.lang.Object typeHandler,
                           boolean asStatic)
        Parameters:
        raw - "Raw" (type-erased) class for this type
        additionalHash - Additional hash code to use, in addition to hash code of the class name
      • JavaType

        protected JavaType​(JavaType base)
        Copy-constructor used when refining/upgrading type instances.
        Since:
        2.7
    • Method Detail

      • withTypeHandler

        public abstract JavaType withTypeHandler​(java.lang.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.
        Returns:
        Newly created type instance
      • withContentTypeHandler

        public abstract JavaType withContentTypeHandler​(java.lang.Object h)
        Mutant factory method that will construct a new instance that is identical to this instance, except that it will have specified content type (element type for arrays, value type for Maps and so forth) handler assigned.
        Returns:
        Newly created type instance, with given
      • withValueHandler

        public abstract JavaType withValueHandler​(java.lang.Object h)
        Mutant factory method that will construct a new instance that is identical to this instance, except that it will have specified value handler assigned.
        Returns:
        Newly created type instance
      • withContentValueHandler

        public abstract JavaType withContentValueHandler​(java.lang.Object h)
        Mutant factory method that will construct a new instance that is identical to this instance, except that it will have specified content value handler assigned.
        Returns:
        Newly created type instance
      • withHandlersFrom

        public JavaType withHandlersFrom​(JavaType src)
        Mutant factory method that will try to copy handlers that the specified source type instance had, if any; this must be done recursively where necessary (as content types may be structured).
        Since:
        2.8.4
      • withContentType

        public abstract JavaType withContentType​(JavaType contentType)
        Mutant factory method that may be called on structured types that have a so-called content type (element of arrays, value type of Maps, referenced type of referential types), and will construct a new instance that is identical to this instance, except that it has specified content type, instead of current one. If content type is already set to given type, this is returned. If type does not have a content type (which is the case with SimpleType), IllegalArgumentException will be thrown.
        Returns:
        Newly created type instance
        Since:
        2.7
      • withStaticTyping

        public 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. The main use case is to allow forcing of specific root value serialization type, and specifically in resolving serializers for contained types (element types for arrays, Collections and Maps).
        Since:
        2.2
      • refine

        public abstract JavaType refine​(java.lang.Class<?> rawType,
                                        TypeBindings bindings,
                                        JavaType superClass,
                                        JavaType[] superInterfaces)
        Mutant factory method that will try to create and return a sub-type instance for known parameterized types; for other types will return `null` to indicate that no just refinement makes necessary sense, without trying to detect special status through implemented interfaces.
        Since:
        2.7
      • forcedNarrowBy

        @Deprecated
        public JavaType forcedNarrowBy​(java.lang.Class<?> subclass)
        Deprecated.
        Legacy method used for forcing sub-typing of this type into type specified by specific type erasure. Deprecated as of 2.7 as such specializations really ought to go through TypeFactory, not directly via JavaType.
        Since:
        2.7
      • _narrow

        @Deprecated
        protected abstract JavaType _narrow​(java.lang.Class<?> subclass)
        Deprecated.
      • getRawClass

        public final java.lang.Class<?> getRawClass()
        Specified by:
        getRawClass in class com.fasterxml.jackson.core.type.ResolvedType
      • hasRawClass

        public final boolean hasRawClass​(java.lang.Class<?> clz)
        Method that can be used to check whether this type has specified Class as its type erasure. Put another way, returns true if instantiation of this Type is given (type-erased) Class.
        Specified by:
        hasRawClass in class com.fasterxml.jackson.core.type.ResolvedType
      • hasContentType

        public boolean hasContentType()
        Accessor that allows determining whether getContentType() should return a non-null value (that is, there is a "content type") or not. True if isContainerType() or ResolvedType.isReferenceType() return true.
        Since:
        2.8
      • isTypeOrSubTypeOf

        public final boolean isTypeOrSubTypeOf​(java.lang.Class<?> clz)
        Since:
        2.6
      • isTypeOrSuperTypeOf

        public final boolean isTypeOrSuperTypeOf​(java.lang.Class<?> clz)
        Since:
        2.9
      • isAbstract

        public boolean isAbstract()
        Specified by:
        isAbstract in class com.fasterxml.jackson.core.type.ResolvedType
      • isConcrete

        public boolean isConcrete()
        Convenience method for checking whether underlying Java type is a concrete class or not: abstract classes and interfaces are not.
        Specified by:
        isConcrete in class com.fasterxml.jackson.core.type.ResolvedType
      • isThrowable

        public boolean isThrowable()
        Specified by:
        isThrowable in class com.fasterxml.jackson.core.type.ResolvedType
      • isArrayType

        public boolean isArrayType()
        Specified by:
        isArrayType in class com.fasterxml.jackson.core.type.ResolvedType
      • isEnumType

        public final boolean isEnumType()
        Method that basically does equivalent of:
          Enum.class.isAssignableFrom(getRawClass())
        
        that is, return true if the underlying type erased class is Enum or one its subtypes (Enum implementations).
        Specified by:
        isEnumType in class com.fasterxml.jackson.core.type.ResolvedType
      • isEnumImplType

        public final boolean isEnumImplType()
        Similar to isEnumType() except does NOT return true for Enum (since that is not Enum implementation type).
        Since:
        2.11
      • isRecordType

        public final boolean isRecordType()
        Since:
        2.12
      • isInterface

        public final boolean isInterface()
        Specified by:
        isInterface in class com.fasterxml.jackson.core.type.ResolvedType
      • isPrimitive

        public final boolean isPrimitive()
        Specified by:
        isPrimitive in class com.fasterxml.jackson.core.type.ResolvedType
      • isFinal

        public final boolean isFinal()
        Specified by:
        isFinal in class com.fasterxml.jackson.core.type.ResolvedType
      • isContainerType

        public abstract boolean isContainerType()
        Specified by:
        isContainerType in class com.fasterxml.jackson.core.type.ResolvedType
        Returns:
        True if type represented is a container type; this includes array, Map and Collection types.
      • isCollectionLikeType

        public boolean isCollectionLikeType()
        Specified by:
        isCollectionLikeType in class com.fasterxml.jackson.core.type.ResolvedType
        Returns:
        True if type is either true Collection type, or something similar (meaning it has at least one type parameter, which describes type of contents)
      • isMapLikeType

        public boolean isMapLikeType()
        Specified by:
        isMapLikeType in class com.fasterxml.jackson.core.type.ResolvedType
        Returns:
        True if type is either true Map type, or something similar (meaning it has at least two type parameter; first one describing key type, second value type)
      • isJavaLangObject

        public final boolean isJavaLangObject()
        Convenience method, short-hand for getRawClass() == Object.class and used to figure if we basically have "untyped" type object.
        Since:
        2.5
      • useStaticType

        public final boolean useStaticType()
        Accessor for checking whether handlers for dealing with values of this type should use static typing (as opposed to dynamic typing). Note that while value of 'true' does mean that static typing is to be used, value of 'false' may still be overridden by other settings.
        Since:
        2.2
      • hasGenericTypes

        public boolean hasGenericTypes()
        Specified by:
        hasGenericTypes in class com.fasterxml.jackson.core.type.ResolvedType
      • getKeyType

        public JavaType getKeyType()
        Specified by:
        getKeyType in class com.fasterxml.jackson.core.type.ResolvedType
      • getContentType

        public JavaType getContentType()
        Specified by:
        getContentType in class com.fasterxml.jackson.core.type.ResolvedType
      • getReferencedType

        public JavaType getReferencedType()
        Specified by:
        getReferencedType in class com.fasterxml.jackson.core.type.ResolvedType
      • containedTypeCount

        public abstract int containedTypeCount()
        Specified by:
        containedTypeCount in class com.fasterxml.jackson.core.type.ResolvedType
      • containedType

        public abstract JavaType containedType​(int index)
        Specified by:
        containedType in class com.fasterxml.jackson.core.type.ResolvedType
      • containedTypeName

        @Deprecated
        public abstract java.lang.String containedTypeName​(int index)
        Deprecated.
        Specified by:
        containedTypeName in class com.fasterxml.jackson.core.type.ResolvedType
      • getParameterSource

        @Deprecated
        public java.lang.Class<?> getParameterSource()
        Deprecated.
        Overrides:
        getParameterSource in class com.fasterxml.jackson.core.type.ResolvedType
      • containedTypeOrUnknown

        public 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).
        Since:
        2.5
      • getBindings

        public abstract TypeBindings getBindings()
        Since:
        2.7
      • findSuperType

        public abstract JavaType findSuperType​(java.lang.Class<?> erasedTarget)
        Method that may be called to find representation of given type within type hierarchy of this type: either this type (if this type has given erased type), one of its supertypes that has the erased types, or null if target is neither this type or any of its supertypes.
        Since:
        2.7
      • getSuperClass

        public abstract JavaType getSuperClass()
        Accessor for finding fully resolved parent class of this type, if it has one; null if not.
        Since:
        2.7
      • getInterfaces

        public abstract java.util.List<JavaType> getInterfaces()
        Accessor for finding fully resolved interfaces this type implements, if any; empty array if none.
        Since:
        2.7
      • findTypeParameters

        public abstract JavaType[] findTypeParameters​(java.lang.Class<?> expType)
        Method that may be used to find paramaterization this type has for given type-erased generic target type.
        Since:
        2.7
      • getValueHandler

        public <T> T getValueHandler()
        Method for accessing value handler associated with this type, if any
      • getTypeHandler

        public <T> T getTypeHandler()
        Method for accessing type handler associated with this type, if any
      • getContentValueHandler

        public java.lang.Object getContentValueHandler()
        Since:
        2.7
      • getContentTypeHandler

        public java.lang.Object getContentTypeHandler()
        Since:
        2.7
      • hasValueHandler

        public boolean hasValueHandler()
        Since:
        2.6
      • hasHandlers

        public boolean hasHandlers()
        Helper method that checks whether this type, or its (optional) key or content type has getValueHandler() or getTypeHandler(); that is, are there any non-standard handlers associated with this type object.
        Since:
        2.8
      • getGenericSignature

        public java.lang.String getGenericSignature()
        Method for accessing signature that contains generic type information, in form compatible with JVM 1.5 as per JLS. It is a superset of getErasedSignature(), in that generic information can be automatically removed if necessary (just remove outermost angle brackets along with content inside)
      • getGenericSignature

        public abstract java.lang.StringBuilder getGenericSignature​(java.lang.StringBuilder sb)
        Parameters:
        sb - StringBuilder to append signature to
        Returns:
        StringBuilder that was passed in; returned to allow call chaining
      • getErasedSignature

        public java.lang.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.
      • getErasedSignature

        public abstract java.lang.StringBuilder getErasedSignature​(java.lang.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.
        Parameters:
        sb - StringBuilder to append signature to
        Returns:
        StringBuilder that was passed in; returned to allow call chaining
      • toString

        public abstract java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • equals

        public abstract boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public final int hashCode()
        Overrides:
        hashCode in class java.lang.Object