Class ClassUtil
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic final class
Value class used for caching Constructor declarations; used because caching done by JDK appears to be somewhat inefficient for some use cases. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic String
apostrophed
(String text) Returns either'text'
(single-quoted) or[null]
.static String
backticked
(String text) Returns either`text`
(backtick-quoted) or[null]
.static String
canBeABeanType
(Class<?> type) static void
checkAndFixAccess
(Member member) Deprecated.Since 2.7 call variant that takes boolean flag.static void
checkAndFixAccess
(Member member, boolean evenIfAlreadyPublic) Method that is called if aMember
may need forced access, to force a field, method or constructor to be accessible: this is done by callingAccessibleObject.setAccessible(boolean)
.static String
classNameOf
(Object inst) Helper method used to construct appropriate description when passed either type (Class) or an instance; in latter case, class of instance is to be used.static Class<?>
static void
closeOnFailAndThrowAsIOE
(JsonGenerator g, Closeable toClose, Exception fail) Helper method that encapsulate logic in trying to close givenCloseable
in case of failure; useful mostly in forcing flush()ing as otherwise error conditions tend to be hard to diagnose.static void
Helper method that encapsulate logic in trying to close output generator in case of failure; useful mostly in forcing flush()ing as otherwise error conditions tend to be hard to diagnose.static <T> T
createInstance
(Class<T> cls, boolean canFixAccess) Method that can be called to try to create an instantiate of specified type.static Object
defaultValue
(Class<?> cls) Helper method used to get default value for wrappers used for primitive types (0 for Integer etc)static <T> Iterator<T>
static String
Helper method that returnsThrowable.getMessage()
for all other exceptions except for (a)JacksonException
, for whichgetOriginalMessage()
is returned, and (b)InvocationTargetException
, for which the cause's message is returned, if available.static Annotation[]
findClassAnnotations
(Class<?> cls) static <T> Constructor<T>
findConstructor
(Class<T> cls, boolean forceAccess) findEnumType
(Class<?> cls) Helper method that can be used to dynamically figure out formal enumeration type (class) for given class of an enumeration value.findEnumType
(Enum<?> en) Helper method that can be used to dynamically figure out formal enumeration type (class) for given enumeration.findEnumType
(EnumMap<?, ?> m) Helper method that can be used to dynamically figure out enumeration type of givenEnumSet
, without having access to its declaration.findEnumType
(EnumSet<?> s) Helper method that can be used to dynamically figure out enumeration type of givenEnumSet
, without having access to its declaration.static <T extends Annotation>
Enum<?>findFirstAnnotatedEnumValue
(Class<Enum<?>> enumClass, Class<T> annotationClass) A method that will look for the first Enum value annotated with the given Annotation.findRawSuperTypes
(Class<?> cls, Class<?> endBefore, boolean addClassItself) findSuperClasses
(Class<?> cls, Class<?> endBefore, boolean addClassItself) Method for finding all super classes (but not super interfaces) of given class, starting with the immediate super class and ending in the most distant one.findSuperTypes
(JavaType type, Class<?> endBefore, boolean addClassItself) Method that will find all sub-classes and implemented interfaces of a given class or interface.findSuperTypes
(Class<?> cls, Class<?> endBefore) Deprecated.findSuperTypes
(Class<?> cls, Class<?> endBefore, List<Class<?>> result) Deprecated.static String
getClassDescription
(Object classOrInstance) Helper method used to construct appropriate description when passed either type (Class) or an instance; in latter case, class of instance is to be used.static Method[]
getClassMethods
(Class<?> cls) Helper method that gets methods declared in given class; usually a simple thing, but sometimes (as per [databind#785]) more complicated, depending on classloader setup.static ClassUtil.Ctor[]
getConstructors
(Class<?> cls) static Field[]
getDeclaredFields
(Class<?> cls) Deprecated.since 2.11 (just call Class method directly)static Method[]
getDeclaredMethods
(Class<?> cls) Deprecated.since 2.11 (just call Class method directly)static Class<?>
getDeclaringClass
(Class<?> cls) static Class<?>
getEnclosingClass
(Class<?> cls) static Type[]
getGenericInterfaces
(Class<?> cls) static Type
getGenericSuperclass
(Class<?> cls) static Class<?>
getOuterClass
(Class<?> type) Method for finding enclosing class for non-static inner classesstatic String
getPackageName
(Class<?> cls) Deprecated.Since 2.12 (just call methods directly or check class name)static Throwable
Method that can be used to find the "root cause", innermost of chained (wrapped) exceptions.static String
getTypeDescription
(JavaType fullType) Helper method to create and return "backticked" description of given resolved type (or,"null"
ifnull
passed), similar to return vaue ofgetClassDescription(Object)
.static boolean
static boolean
hasEnclosingMethod
(Class<?> cls) static boolean
Deprecated.Since 2.6 not used; may be removed before 3.xstatic boolean
isBogusClass
(Class<?> cls) static boolean
isCollectionMapOrArray
(Class<?> type) static boolean
isConcrete
(Class<?> type) Helper method that checks if given class is a concrete one; that is, not an interface or abstract class.static boolean
isConcrete
(Member member) static boolean
isEnumType
(Class<?> rawType) Helper method that encapsulates reliable check on whether given raw type "is an Enum", that is, is or extendsEnum
.static boolean
isJacksonStdImpl
(Class<?> implClass) static boolean
isJacksonStdImpl
(Object impl) Method that can be called to determine if given Object is the default implementation Jackson uses; as opposed to a custom serializer installed by a module or calling application.static boolean
isJDKClass
(Class<?> rawType) Accessor for checking whether givenClass
is under Java package ofjava.*
orjavax.*
(including all sub-packages).static String
isLocalType
(Class<?> type, boolean allowNonStatic) static boolean
isNonStaticInnerClass
(Class<?> cls) static boolean
isObjectOrPrimitive
(Class<?> cls) static boolean
isProxyType
(Class<?> type) Helper method used to weed out dynamic Proxy types; types that do not expose concrete method API that we could use to figure out automatic Bean (property) based serialization.static boolean
isRecordType
(Class<?> cls) Helper method for detecting Java14-added newRecord
typesstatic String
name
(PropertyName name) Returns either single-quoted (apostrophe)'name'
(ifname
not null), or "[null]" ifname
is null.static String
Returns either single-quoted (apostrophe)'name'
(ifname
not null), or "[null]" ifname
is null.static String
Returns either single-quoted (apostrophe)'named.getName()'
(ifnamed
not null), or "[null]" ifnamed
is null.static String
Returns either `cls.getName()` (if `cls` not null), or "[null]" if `cls` is null.static <T> T
nonNull
(T valueOrNull, T defaultValue) static String
nonNullString
(String str) static String
nullOrToString
(Object value) static Class<?>
primitiveType
(Class<?> type) Method that can be used to find primitive type for given class if (but only if) it is either wrapper type or primitive type; returnsnull
if type is neither.static String
Returns either quoted value (with double-quotes) -- if argument non-null String -- or String NULL (no quotes) (if null).static Class<?>
static void
Method that will wrap 't' as anIllegalArgumentException
if it is a checked exception; otherwise (runtime exception or error) throw as isstatic void
throwAsIAE
(Throwable t, String msg) Method that will wrap 't' as anIllegalArgumentException
(and with specified message) if it is a checked exception; otherwise (runtime exception or error) throw as isstatic <T> T
static Throwable
Helper method that will check if argument is anError
, and if so, (re)throw it; otherwise just returnstatic Throwable
Helper method that will check if argument is anIOException
, and if so, (re)throw it; otherwise just returnstatic Throwable
Helper method that will check if argument is anRuntimeException
, and if so, (re)throw it; otherwise just returnstatic Throwable
Method that works like by callinggetRootCause(java.lang.Throwable)
and then either throwing it (if instanceofIOException
), or return.static void
Method that will locate the innermost exception for given Throwable; and then wrap it as anIllegalArgumentException
if it is a checked exception; otherwise (runtime exception or error) throw as isstatic void
unwrapAndThrowAsIAE
(Throwable t, String msg) Method that will locate the innermost exception for given Throwable; and then wrap it as anIllegalArgumentException
if it is a checked exception; otherwise (runtime exception or error) throw as isstatic void
verifyMustOverride
(Class<?> expType, Object instance, String method) static Class<?>
wrapperType
(Class<?> primitiveType) Helper method for finding wrapper type for given primitive type (why isn't there one in JDK?).
-
Constructor Details
-
ClassUtil
public ClassUtil()
-
-
Method Details
-
emptyIterator
- Since:
- 2.7
-
findSuperTypes
public static List<JavaType> findSuperTypes(JavaType type, Class<?> endBefore, boolean addClassItself) Method that will find all sub-classes and implemented interfaces of a given class or interface. Classes are listed in order of precedence, starting with the immediate super-class, followed by interfaces class directly declares to implemented, and then recursively followed by parent of super-class and so forth. Note thatObject.class
is not included in the list regardless of whetherendBefore
argument is defined or not.- Parameters:
endBefore
- Super-type to NOT include in results, if any; when encountered, will be ignored (and no super types are checked).- Since:
- 2.7
-
findRawSuperTypes
public static List<Class<?>> findRawSuperTypes(Class<?> cls, Class<?> endBefore, boolean addClassItself) - Since:
- 2.7
-
findSuperClasses
public static List<Class<?>> findSuperClasses(Class<?> cls, Class<?> endBefore, boolean addClassItself) Method for finding all super classes (but not super interfaces) of given class, starting with the immediate super class and ending in the most distant one. Class itself is included ifaddClassItself
is true.NOTE: mostly/only called to resolve mix-ins as that's where we do not care about fully-resolved types, just associated annotations.
- Since:
- 2.7
-
findSuperTypes
Deprecated. -
findSuperTypes
@Deprecated public static List<Class<?>> findSuperTypes(Class<?> cls, Class<?> endBefore, List<Class<?>> result) Deprecated. -
canBeABeanType
- Returns:
- Null if class might be a bean; type String (that identifies why it's not a bean) if not
-
isLocalType
-
getOuterClass
Method for finding enclosing class for non-static inner classes -
isProxyType
Helper method used to weed out dynamic Proxy types; types that do not expose concrete method API that we could use to figure out automatic Bean (property) based serialization. -
isConcrete
Helper method that checks if given class is a concrete one; that is, not an interface or abstract class. -
isConcrete
-
isCollectionMapOrArray
-
isBogusClass
-
isRecordType
Helper method for detecting Java14-added newRecord
types- Since:
- 2.12
-
isObjectOrPrimitive
- Since:
- 2.7
-
hasClass
- Since:
- 2.9
-
verifyMustOverride
- Since:
- 2.9
-
hasGetterSignature
Deprecated.Since 2.6 not used; may be removed before 3.x -
throwIfError
Helper method that will check if argument is anError
, and if so, (re)throw it; otherwise just return- Since:
- 2.9
-
throwIfRTE
Helper method that will check if argument is anRuntimeException
, and if so, (re)throw it; otherwise just return- Since:
- 2.9
-
throwIfIOE
Helper method that will check if argument is anIOException
, and if so, (re)throw it; otherwise just return- Throws:
IOException
- Since:
- 2.9
-
getRootCause
Method that can be used to find the "root cause", innermost of chained (wrapped) exceptions. -
throwRootCauseIfIOE
Method that works like by callinggetRootCause(java.lang.Throwable)
and then either throwing it (if instanceofIOException
), or return.- Throws:
IOException
- Since:
- 2.8
-
throwAsIAE
Method that will wrap 't' as anIllegalArgumentException
if it is a checked exception; otherwise (runtime exception or error) throw as is -
throwAsIAE
Method that will wrap 't' as anIllegalArgumentException
(and with specified message) if it is a checked exception; otherwise (runtime exception or error) throw as is -
throwAsMappingException
public static <T> T throwAsMappingException(DeserializationContext ctxt, IOException e0) throws JsonMappingException - Throws:
JsonMappingException
- Since:
- 2.9
-
unwrapAndThrowAsIAE
Method that will locate the innermost exception for given Throwable; and then wrap it as anIllegalArgumentException
if it is a checked exception; otherwise (runtime exception or error) throw as is -
unwrapAndThrowAsIAE
Method that will locate the innermost exception for given Throwable; and then wrap it as anIllegalArgumentException
if it is a checked exception; otherwise (runtime exception or error) throw as is -
closeOnFailAndThrowAsIOE
Helper method that encapsulate logic in trying to close output generator in case of failure; useful mostly in forcing flush()ing as otherwise error conditions tend to be hard to diagnose. However, it is often the case that output state may be corrupt so we need to be prepared for secondary exception without masking original one.- Throws:
IOException
- Since:
- 2.8
-
closeOnFailAndThrowAsIOE
public static void closeOnFailAndThrowAsIOE(JsonGenerator g, Closeable toClose, Exception fail) throws IOException Helper method that encapsulate logic in trying to close givenCloseable
in case of failure; useful mostly in forcing flush()ing as otherwise error conditions tend to be hard to diagnose. However, it is often the case that output state may be corrupt so we need to be prepared for secondary exception without masking original one.- Throws:
IOException
- Since:
- 2.8
-
createInstance
public static <T> T createInstance(Class<T> cls, boolean canFixAccess) throws IllegalArgumentException Method that can be called to try to create an instantiate of specified type. Instantiation is done using default no-argument constructor.- Parameters:
canFixAccess
- Whether it is possible to try to change access rights of the default constructor (in case it is not publicly accessible) or not.- Throws:
IllegalArgumentException
- If instantiation fails for any reason; except for cases where constructor throws an unchecked exception (which will be passed as is)
-
findConstructor
public static <T> Constructor<T> findConstructor(Class<T> cls, boolean forceAccess) throws IllegalArgumentException - Throws:
IllegalArgumentException
-
classOf
- Since:
- 2.9
-
rawClass
- Since:
- 2.9
-
nonNull
public static <T> T nonNull(T valueOrNull, T defaultValue) - Since:
- 2.9
-
nullOrToString
- Since:
- 2.9
-
nonNullString
- Since:
- 2.9
-
quotedOr
Returns either quoted value (with double-quotes) -- if argument non-null String -- or String NULL (no quotes) (if null).- Since:
- 2.9
-
getClassDescription
Helper method used to construct appropriate description when passed either type (Class) or an instance; in latter case, class of instance is to be used. -
getTypeDescription
Helper method to create and return "backticked" description of given resolved type (or,"null"
ifnull
passed), similar to return vaue ofgetClassDescription(Object)
.- Parameters:
fullType
- Fully resolved type or null- Returns:
- String description of type including generic type parameters, surrounded by backticks, if type passed; or string "null" if {code null} passed
- Since:
- 2.10
-
classNameOf
Helper method used to construct appropriate description when passed either type (Class) or an instance; in latter case, class of instance is to be used.- Since:
- 2.9
-
nameOf
Returns either `cls.getName()` (if `cls` not null), or "[null]" if `cls` is null.- Since:
- 2.9
-
nameOf
Returns either single-quoted (apostrophe)'named.getName()'
(ifnamed
not null), or "[null]" ifnamed
is null.NOTE: before 2.12 returned "backticked" version instead of single-quoted name; changed to be compatible with most existing quoting usage within databind
- Since:
- 2.9
-
name
Returns either single-quoted (apostrophe)'name'
(ifname
not null), or "[null]" ifname
is null.- Since:
- 2.12
-
name
Returns either single-quoted (apostrophe)'name'
(ifname
not null), or "[null]" ifname
is null.- Since:
- 2.12
-
backticked
Returns either`text`
(backtick-quoted) or[null]
.- Since:
- 2.9
-
apostrophed
Returns either'text'
(single-quoted) or[null]
.- Since:
- 2.9
-
exceptionMessage
Helper method that returnsThrowable.getMessage()
for all other exceptions except for (a)JacksonException
, for whichgetOriginalMessage()
is returned, and (b)InvocationTargetException
, for which the cause's message is returned, if available. Method is used to avoid accidentally including trailing location information twice in message when wrapping exceptions.- Since:
- 2.9.7
-
defaultValue
Helper method used to get default value for wrappers used for primitive types (0 for Integer etc) -
wrapperType
Helper method for finding wrapper type for given primitive type (why isn't there one in JDK?). NOTE: throwsIllegalArgumentException
if given type is NOT primitive type (caller has to check). -
primitiveType
Method that can be used to find primitive type for given class if (but only if) it is either wrapper type or primitive type; returnsnull
if type is neither.- Since:
- 2.7
-
checkAndFixAccess
Deprecated.Since 2.7 call variant that takes boolean flag.Equivalent to call:checkAndFixAccess(member, false);
-
checkAndFixAccess
Method that is called if aMember
may need forced access, to force a field, method or constructor to be accessible: this is done by callingAccessibleObject.setAccessible(boolean)
.- Parameters:
member
- Accessor to callsetAccessible()
on.evenIfAlreadyPublic
- Whether to always try to make accessor accessible, even ifpublic
(true), or only if needed to force by-pass of non-public
access (false)- Since:
- 2.7
-
isEnumType
Helper method that encapsulates reliable check on whether given raw type "is an Enum", that is, is or extendsEnum
.- Since:
- 2.10.1
-
findEnumType
Helper method that can be used to dynamically figure out enumeration type of givenEnumSet
, without having access to its declaration. Code is needed to work around design flaw in JDK. -
findEnumType
Helper method that can be used to dynamically figure out enumeration type of givenEnumSet
, without having access to its declaration. Code is needed to work around design flaw in JDK. -
findEnumType
Helper method that can be used to dynamically figure out formal enumeration type (class) for given enumeration. This is either class of enum instance (for "simple" enumerations), or its superclass (for enums with instance fields or methods) -
findEnumType
Helper method that can be used to dynamically figure out formal enumeration type (class) for given class of an enumeration value. This is either class of enum instance (for "simple" enumerations), or its superclass (for enums with instance fields or methods) -
findFirstAnnotatedEnumValue
public static <T extends Annotation> Enum<?> findFirstAnnotatedEnumValue(Class<Enum<?>> enumClass, Class<T> annotationClass) A method that will look for the first Enum value annotated with the given Annotation.If there's more than one value annotated, the first one found will be returned. Which one exactly is used is undetermined.
- Parameters:
enumClass
- The Enum class to scan for a value with the given annotationannotationClass
- The annotation to look for.- Returns:
- the Enum value annotated with the given Annotation or
null
if none is found. - Throws:
IllegalArgumentException
- if there's a reflection issue accessing the Enum- Since:
- 2.8
-
isJacksonStdImpl
Method that can be called to determine if given Object is the default implementation Jackson uses; as opposed to a custom serializer installed by a module or calling application. Determination is done usingJacksonStdImpl
annotation on handler (serializer, deserializer etc) class.NOTE: passing `null` is legal, and will result in
true
being returned. -
isJacksonStdImpl
-
isJDKClass
Accessor for checking whether givenClass
is under Java package ofjava.*
orjavax.*
(including all sub-packages).Added since some aspects of handling need to be changed for JDK types (and possibly some extensions under
javax.
?): for example, forcing of access will not work well for future JDKs (12 and later).Note: in Jackson 2.11 only returned true for
java.*
(and notjavax.*
); was changed in 2.12.- Since:
- 2.11
-
isNonStaticInnerClass
-
getPackageName
Deprecated.Since 2.12 (just call methods directly or check class name)- Since:
- 2.7
-
hasEnclosingMethod
- Since:
- 2.7
-
getDeclaredFields
Deprecated.since 2.11 (just call Class method directly) -
getDeclaredMethods
Deprecated.since 2.11 (just call Class method directly) -
findClassAnnotations
- Since:
- 2.7
-
getClassMethods
Helper method that gets methods declared in given class; usually a simple thing, but sometimes (as per [databind#785]) more complicated, depending on classloader setup.- Since:
- 2.9
-
getConstructors
- Since:
- 2.7
-
getDeclaringClass
- Since:
- 2.7
-
getGenericSuperclass
- Since:
- 2.7
-
getGenericInterfaces
- Since:
- 2.7
-
getEnclosingClass
- Since:
- 2.7
-