Class ClassUtils
java.lang.Class utility methods.
 Mainly for internal use within the framework.
- Since:
- 1.1
- Author:
- Juergen Hoeller, Keith Donald, Rob Harrop, Sam Brannen, Sebastien Deleuze
- See Also:
- 
Field SummaryFields
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionstatic StringaddResourcePathToPackagePath(Class<?> clazz, String resourceName) Return a path suitable for use withClassLoader.getResource(also suitable for use withClass.getResourceby prepending a slash ('/') to the return value).static StringclassNamesToString(Class<?>... classes) Build a String that consists of the names of the classes/interfaces in the given array.static StringclassNamesToString(Collection<Class<?>> classes) Build a String that consists of the names of the classes/interfaces in the given collection.static StringclassPackageAsResourcePath(Class<?> clazz) Given an input class object, return a string which consists of the class's package name as a pathname, i.e., all dots ('.') are replaced by slashes ('/').static StringconvertClassNameToResourcePath(String className) Convert a "."-based fully qualified class name to a "/"-based resource path.static StringconvertResourcePathToClassName(String resourcePath) Convert a "/"-based resource path to a "."-based fully qualified class name.static Class<?>createCompositeInterface(Class<?>[] interfaces, ClassLoader classLoader) Create a composite interface Class for the given interfaces, implementing the given interfaces in one single Class.static Class<?>determineCommonAncestor(Class<?> clazz1, Class<?> clazz2) Determine the common ancestor of the given classes, if any.static Class<?>forName(String name, ClassLoader classLoader) Replacement forClass.forName()that also returns Class instances for primitives (e.g.static Class<?>[]getAllInterfaces(Object instance) Return all interfaces that the given instance implements as an array, including ones implemented by superclasses.getAllInterfacesAsSet(Object instance) Return all interfaces that the given instance implements as a Set, including ones implemented by superclasses.static Class<?>[]getAllInterfacesForClass(Class<?> clazz) Return all interfaces that the given class implements as an array, including ones implemented by superclasses.static Class<?>[]getAllInterfacesForClass(Class<?> clazz, ClassLoader classLoader) Return all interfaces that the given class implements as an array, including ones implemented by superclasses.getAllInterfacesForClassAsSet(Class<?> clazz) Return all interfaces that the given class implements as a Set, including ones implemented by superclasses.getAllInterfacesForClassAsSet(Class<?> clazz, ClassLoader classLoader) Return all interfaces that the given class implements as a Set, including ones implemented by superclasses.static StringgetClassFileName(Class<?> clazz) Determine the name of the class file, relative to the containing package: e.g.static <T> Constructor<T>getConstructorIfAvailable(Class<T> clazz, Class<?>... paramTypes) Determine whether the given class has a public constructor with the given signature, and return it if available (else returnnull).static ClassLoaderReturn the default ClassLoader to use: typically the thread context ClassLoader, if available; the ClassLoader that loaded the ClassUtils class will be used as fallback.static StringgetDescriptiveType(Object value) Return a descriptive name for the given object's type: usually simply the class name, but component type class name + "[]" for arrays, and an appended list of implemented interfaces for JDK proxies.static MethodgetInterfaceMethodIfPossible(Method method) Deprecated.static MethodgetInterfaceMethodIfPossible(Method method, Class<?> targetClass) Determine a corresponding interface method for the given method handle, if possible.static MethodDetermine whether the given class has a public method with the given signature, and return it if available (else throws anIllegalStateException).static intgetMethodCountForName(Class<?> clazz, String methodName) Return the number of methods with a given name (with any argument types), for the given class and/or its superclasses.static MethodgetMethodIfAvailable(Class<?> clazz, String methodName, Class<?>... paramTypes) Determine whether the given class has a public method with the given signature, and return it if available (else returnnull).static MethodgetMostSpecificMethod(Method method, Class<?> targetClass) Given a method, which may come from an interface, and a target class used in the current reflective invocation, find the corresponding target method if there is one — for example, the method may beIFoo.bar(), and the target class may beDefaultFoo.static StringgetPackageName(Class<?> clazz) Determine the name of the package of the given class, e.g.static StringgetPackageName(String fqClassName) Determine the name of the package of the given fully-qualified class name, e.g.static StringgetQualifiedMethodName(Method method) Return the qualified name of the given method, consisting of fully qualified interface/class name + "." + method name.static StringgetQualifiedMethodName(Method method, Class<?> clazz) Return the qualified name of the given method, consisting of fully qualified interface/class name + "." + method name.static StringgetQualifiedName(Class<?> clazz) Return the qualified name of the given class: usually simply the class name, but component type class name + "[]" for arrays.static StringgetShortName(Class<?> clazz) Get the class name without the qualified package name.static StringgetShortName(String className) Get the class name without the qualified package name.static StringgetShortNameAsProperty(Class<?> clazz) Return the short string name of a Java class in uncapitalized JavaBeans property format.static MethodgetStaticMethod(Class<?> clazz, String methodName, Class<?>... args) Return a public static method of a class.static Class<?>getUserClass(Class<?> clazz) Return the user-defined class for the given class: usually simply the given class, but the original class in case of a CGLIB-generated subclass.static Class<?>getUserClass(Object instance) Return the user-defined class for the given instance: usually simply the class of the given instance, but the original class in case of a CGLIB-generated subclass.static booleanhasAtLeastOneMethodWithName(Class<?> clazz, String methodName) Does the given class or one of its superclasses at least have one or more methods with the supplied name (with any argument types)? Includes non-public methods.static booleanhasConstructor(Class<?> clazz, Class<?>... paramTypes) Determine whether the given class has a public constructor with the given signature.static booleanDetermine whether the given class has a public method with the given signature.static booleanDetermine whether the given class has a public method with the given signature.static booleanisAssignable(Class<?> lhsType, Class<?> rhsType) Check if the right-hand side type may be assigned to the left-hand side type, assuming setting by reflection.static booleanisAssignableValue(Class<?> type, Object value) Determine if the given type is assignable from the given value, assuming setting by reflection.static booleanisCacheSafe(Class<?> clazz, ClassLoader classLoader) Check whether the given class is cache-safe in the given context, i.e.static booleanisCglibProxy(Object object) Deprecated.as of 5.2, in favor of custom (possibly narrower) checks such as for a Spring AOP proxystatic booleanisCglibProxyClass(Class<?> clazz) Deprecated.as of 5.2, in favor of custom (possibly narrower) checks or simply a check for containingCGLIB_CLASS_SEPARATORstatic booleanisCglibProxyClassName(String className) Deprecated.as of 5.2, in favor of custom (possibly narrower) checks or simply a check for containingCGLIB_CLASS_SEPARATORstatic booleanisInnerClass(Class<?> clazz) Determine if the supplied class is an inner class, i.e.static booleanisJavaLanguageInterface(Class<?> ifc) Determine whether the given interface is a common Java language interface:Serializable,Externalizable,Closeable,AutoCloseable,Cloneable,Comparable- all of which can be ignored when looking for 'primary' user-level interfaces.static booleanisLambdaClass(Class<?> clazz) Determine if the suppliedClassis a JVM-generated implementation class for a lambda expression or method reference.static booleanisPresent(String className, ClassLoader classLoader) Determine whether theClassidentified by the supplied name is present and can be loaded.static booleanisPrimitiveArray(Class<?> clazz) Check if the given class represents an array of primitives, i.e.static booleanisPrimitiveOrWrapper(Class<?> clazz) Check if the given class represents a primitive (i.e.static booleanisPrimitiveWrapper(Class<?> clazz) Check if the given class represents a primitive wrapper, i.e.static booleanisPrimitiveWrapperArray(Class<?> clazz) Check if the given class represents an array of primitive wrappers, i.e.static booleanisSimpleValueType(Class<?> type) Delegate forBeanUtils.isSimpleValueType(java.lang.Class<?>).static booleanisStaticClass(Class<?> clazz) Determine if the supplied class is a static class.static booleanisUserLevelMethod(Method method) Determine whether the given method is declared by the user or at least pointing to a user-declared method.static booleanisVisible(Class<?> clazz, ClassLoader classLoader) Check whether the given class is visible in the given ClassLoader.static booleanisVoidType(Class<?> type) Determine if the given type represents eitherVoidorvoid.static booleanmatchesTypeName(Class<?> clazz, String typeName) Check whether the given class matches the user-specified type name.static ClassLoaderoverrideThreadContextClassLoader(ClassLoader classLoaderToUse) Override the thread context ClassLoader with the environment's bean ClassLoader if necessary, i.e.static Class<?>resolveClassName(String className, ClassLoader classLoader) Resolve the given class name into a Class instance.static Class<?>Resolve the given class name as primitive class, if appropriate, according to the JVM's naming rules for primitive classes.static Class<?>resolvePrimitiveIfNecessary(Class<?> clazz) Resolve the given class if it is a primitive class, returning the corresponding primitive wrapper type instead.static Class<?>[]toClassArray(Collection<Class<?>> collection) Copy the givenCollectioninto aClassarray.
- 
Field Details- 
ARRAY_SUFFIXSuffix for array class names:"[]".- See Also:
 
- 
CGLIB_CLASS_SEPARATORThe CGLIB class separator:"$$".- See Also:
 
- 
CLASS_FILE_SUFFIXThe ".class" file suffix.- See Also:
 
 
- 
- 
Constructor Details- 
ClassUtilspublic ClassUtils()
 
- 
- 
Method Details- 
getDefaultClassLoaderReturn the default ClassLoader to use: typically the thread context ClassLoader, if available; the ClassLoader that loaded the ClassUtils class will be used as fallback.Call this method if you intend to use the thread context ClassLoader in a scenario where you clearly prefer a non-null ClassLoader reference: for example, for class path resource loading (but not necessarily for Class.forName, which accepts anullClassLoader reference as well).- Returns:
- the default ClassLoader (only nullif even the system ClassLoader isn't accessible)
- See Also:
 
- 
overrideThreadContextClassLoader@Nullable public static ClassLoader overrideThreadContextClassLoader(@Nullable ClassLoader classLoaderToUse) Override the thread context ClassLoader with the environment's bean ClassLoader if necessary, i.e. if the bean ClassLoader is not equivalent to the thread context ClassLoader already.- Parameters:
- classLoaderToUse- the actual ClassLoader to use for the thread context
- Returns:
- the original thread context ClassLoader, or nullif not overridden
 
- 
forNamepublic static Class<?> forName(String name, @Nullable ClassLoader classLoader) throws ClassNotFoundException, LinkageError Replacement forClass.forName()that also returns Class instances for primitives (e.g. "int") and array class names (e.g. "String[]"). Furthermore, it is also capable of resolving nested class names in Java source style (e.g. "java.lang.Thread.State" instead of "java.lang.Thread$State").- Parameters:
- name- the name of the Class
- classLoader- the class loader to use (can be- null, which indicates the default class loader)
- Returns:
- a class instance for the supplied name
- Throws:
- ClassNotFoundException- if the class was not found
- LinkageError- if the class file could not be loaded
- See Also:
 
- 
resolveClassNamepublic static Class<?> resolveClassName(String className, @Nullable ClassLoader classLoader) throws IllegalArgumentException Resolve the given class name into a Class instance. Supports primitives (like "int") and array class names (like "String[]").This is effectively equivalent to the forNamemethod with the same arguments, with the only difference being the exceptions thrown in case of class loading failure.- Parameters:
- className- the name of the Class
- classLoader- the class loader to use (can be- null, which indicates the default class loader)
- Returns:
- a class instance for the supplied name
- Throws:
- IllegalArgumentException- if the class name was not resolvable (that is, the class could not be found or the class file could not be loaded)
- IllegalStateException- if the corresponding class is resolvable but there was a readability mismatch in the inheritance hierarchy of the class (typically a missing dependency declaration in a Jigsaw module definition for a superclass or interface implemented by the class to be loaded here)
- See Also:
 
- 
isPresentDetermine whether theClassidentified by the supplied name is present and can be loaded. Will returnfalseif either the class or one of its dependencies is not present or cannot be loaded.- Parameters:
- className- the name of the class to check
- classLoader- the class loader to use (can be- nullwhich indicates the default class loader)
- Returns:
- whether the specified class is present (including all of its superclasses and interfaces)
- Throws:
- IllegalStateException- if the corresponding class is resolvable but there was a readability mismatch in the inheritance hierarchy of the class (typically a missing dependency declaration in a Jigsaw module definition for a superclass or interface implemented by the class to be checked here)
 
- 
isVisibleCheck whether the given class is visible in the given ClassLoader.- Parameters:
- clazz- the class to check (typically an interface)
- classLoader- the ClassLoader to check against (can be- nullin which case this method will always return- true)
 
- 
isCacheSafeCheck whether the given class is cache-safe in the given context, i.e. whether it is loaded by the given ClassLoader or a parent of it.- Parameters:
- clazz- the class to analyze
- classLoader- the ClassLoader to potentially cache metadata in (can be- nullwhich indicates the system class loader)
 
- 
resolvePrimitiveClassNameResolve the given class name as primitive class, if appropriate, according to the JVM's naming rules for primitive classes.Also supports the JVM's internal class names for primitive arrays. Does not support the "[]" suffix notation for primitive arrays; this is only supported by forName(String, ClassLoader).- Parameters:
- name- the name of the potentially primitive class
- Returns:
- the primitive class, or nullif the name does not denote a primitive class or primitive array class
 
- 
isPrimitiveWrapperCheck if the given class represents a primitive wrapper, i.e. Boolean, Byte, Character, Short, Integer, Long, Float, Double, or Void.- Parameters:
- clazz- the class to check
- Returns:
- whether the given class is a primitive wrapper class
 
- 
isPrimitiveOrWrapperCheck if the given class represents a primitive (i.e. boolean, byte, char, short, int, long, float, or double),void, or a wrapper for those types (i.e. Boolean, Byte, Character, Short, Integer, Long, Float, Double, or Void).- Parameters:
- clazz- the class to check
- Returns:
- trueif the given class represents a primitive, void, or a wrapper class
 
- 
isPrimitiveArrayCheck if the given class represents an array of primitives, i.e. boolean, byte, char, short, int, long, float, or double.- Parameters:
- clazz- the class to check
- Returns:
- whether the given class is a primitive array class
 
- 
isPrimitiveWrapperArrayCheck if the given class represents an array of primitive wrappers, i.e. Boolean, Byte, Character, Short, Integer, Long, Float, or Double.- Parameters:
- clazz- the class to check
- Returns:
- whether the given class is a primitive wrapper array class
 
- 
resolvePrimitiveIfNecessaryResolve the given class if it is a primitive class, returning the corresponding primitive wrapper type instead.- Parameters:
- clazz- the class to check
- Returns:
- the original class, or a primitive wrapper for the original primitive type
 
- 
isVoidTypeDetermine if the given type represents eitherVoidorvoid.
- 
isSimpleValueTypeDelegate forBeanUtils.isSimpleValueType(java.lang.Class<?>). Also used byObjectUtils.nullSafeConciseToString(java.lang.Object).Check if the given type represents a common "simple" value type: primitive or primitive wrapper, Enum,Stringor otherCharSequence,Number,Date,Temporal,ZoneId,TimeZone,File,Path,URI,URL,InetAddress,Charset,Currency,Locale,UUID,Pattern, orClass.Voidandvoidare not considered simple value types.- Parameters:
- type- the type to check
- Returns:
- whether the given type represents a "simple" value type,
 suggesting value-based data binding and toStringoutput
- Since:
- 6.1
 
- 
isAssignableCheck if the right-hand side type may be assigned to the left-hand side type, assuming setting by reflection. Considers primitive wrapper classes as assignable to the corresponding primitive types.- Parameters:
- lhsType- the target type (left-hand side (LHS) type)
- rhsType- the value type (right-hand side (RHS) type) that should be assigned to the target type
- Returns:
- trueif- rhsTypeis assignable to- lhsType
- See Also:
 
- 
isAssignableValueDetermine if the given type is assignable from the given value, assuming setting by reflection. Considers primitive wrapper classes as assignable to the corresponding primitive types.- Parameters:
- type- the target type
- value- the value that should be assigned to the type
- Returns:
- if the type is assignable from the value
 
- 
convertResourcePathToClassNameConvert a "/"-based resource path to a "."-based fully qualified class name.- Parameters:
- resourcePath- the resource path pointing to a class
- Returns:
- the corresponding fully qualified class name
 
- 
convertClassNameToResourcePathConvert a "."-based fully qualified class name to a "/"-based resource path.- Parameters:
- className- the fully qualified class name
- Returns:
- the corresponding resource path, pointing to the class
 
- 
addResourcePathToPackagePathReturn a path suitable for use withClassLoader.getResource(also suitable for use withClass.getResourceby prepending a slash ('/') to the return value). Built by taking the package of the specified class file, converting all dots ('.') to slashes ('/'), adding a trailing slash if necessary, and concatenating the specified resource name to this.
 As such, this function may be used to build a path suitable for loading a resource file that is in the same package as a class file, althoughClassPathResourceis usually even more convenient.- Parameters:
- clazz- the Class whose package will be used as the base
- resourceName- the resource name to append. A leading slash is optional.
- Returns:
- the built-up resource path
- See Also:
 
- 
classPackageAsResourcePathGiven an input class object, return a string which consists of the class's package name as a pathname, i.e., all dots ('.') are replaced by slashes ('/'). Neither a leading nor trailing slash is added. The result could be concatenated with a slash and the name of a resource and fed directly toClassLoader.getResource(). For it to be fed toClass.getResourceinstead, a leading slash would also have to be prepended to the returned value.- Parameters:
- clazz- the input class. A- nullvalue or the default (empty) package will result in an empty string ("") being returned.
- Returns:
- a path which represents the package name
- See Also:
 
- 
classNamesToStringBuild a String that consists of the names of the classes/interfaces in the given array.Basically like AbstractCollection.toString(), but stripping the "class "/"interface " prefix before every class name.- Parameters:
- classes- an array of Class objects
- Returns:
- a String of form "[com.foo.Bar, com.foo.Baz]"
- See Also:
 
- 
classNamesToStringBuild a String that consists of the names of the classes/interfaces in the given collection.Basically like AbstractCollection.toString(), but stripping the "class "/"interface " prefix before every class name.- Parameters:
- classes- a Collection of Class objects (can be- null)
- Returns:
- a String of form "[com.foo.Bar, com.foo.Baz]"
- See Also:
 
- 
toClassArrayCopy the givenCollectioninto aClassarray.The Collectionmust containClasselements only.- Parameters:
- collection- the- Collectionto copy
- Returns:
- the Classarray
- Since:
- 3.1
- See Also:
 
- 
getAllInterfacesReturn all interfaces that the given instance implements as an array, including ones implemented by superclasses.- Parameters:
- instance- the instance to analyze for interfaces
- Returns:
- all interfaces that the given instance implements as an array
 
- 
getAllInterfacesForClassReturn all interfaces that the given class implements as an array, including ones implemented by superclasses.If the class itself is an interface, it gets returned as sole interface. - Parameters:
- clazz- the class to analyze for interfaces
- Returns:
- all interfaces that the given object implements as an array
 
- 
getAllInterfacesForClasspublic static Class<?>[] getAllInterfacesForClass(Class<?> clazz, @Nullable ClassLoader classLoader) Return all interfaces that the given class implements as an array, including ones implemented by superclasses.If the class itself is an interface, it gets returned as sole interface. - Parameters:
- clazz- the class to analyze for interfaces
- classLoader- the ClassLoader that the interfaces need to be visible in (can be- nullwhen accepting all declared interfaces)
- Returns:
- all interfaces that the given object implements as an array
 
- 
getAllInterfacesAsSetReturn all interfaces that the given instance implements as a Set, including ones implemented by superclasses.- Parameters:
- instance- the instance to analyze for interfaces
- Returns:
- all interfaces that the given instance implements as a Set
 
- 
getAllInterfacesForClassAsSetReturn all interfaces that the given class implements as a Set, including ones implemented by superclasses.If the class itself is an interface, it gets returned as sole interface. - Parameters:
- clazz- the class to analyze for interfaces
- Returns:
- all interfaces that the given object implements as a Set
 
- 
getAllInterfacesForClassAsSetpublic static Set<Class<?>> getAllInterfacesForClassAsSet(Class<?> clazz, @Nullable ClassLoader classLoader) Return all interfaces that the given class implements as a Set, including ones implemented by superclasses.If the class itself is an interface, it gets returned as sole interface. - Parameters:
- clazz- the class to analyze for interfaces
- classLoader- the ClassLoader that the interfaces need to be visible in (can be- nullwhen accepting all declared interfaces)
- Returns:
- all interfaces that the given object implements as a Set
 
- 
createCompositeInterfacepublic static Class<?> createCompositeInterface(Class<?>[] interfaces, @Nullable ClassLoader classLoader) Create a composite interface Class for the given interfaces, implementing the given interfaces in one single Class.This implementation builds a JDK proxy class for the given interfaces. - Parameters:
- interfaces- the interfaces to merge
- classLoader- the ClassLoader to create the composite Class in
- Returns:
- the merged interface as Class
- Throws:
- IllegalArgumentException- if the specified interfaces expose conflicting method signatures (or a similar constraint is violated)
- See Also:
 
- 
determineCommonAncestor@Nullable public static Class<?> determineCommonAncestor(@Nullable Class<?> clazz1, @Nullable Class<?> clazz2) Determine the common ancestor of the given classes, if any.- Parameters:
- clazz1- the class to introspect
- clazz2- the other class to introspect
- Returns:
- the common ancestor (i.e. common superclass, one interface
 extending the other), or nullif none found. If any of the given classes isnull, the other class will be returned.
- Since:
- 3.2.6
 
- 
isJavaLanguageInterfaceDetermine whether the given interface is a common Java language interface:Serializable,Externalizable,Closeable,AutoCloseable,Cloneable,Comparable- all of which can be ignored when looking for 'primary' user-level interfaces. Common characteristics: no service-level operations, no bean property methods, no default methods.- Parameters:
- ifc- the interface to check
- Since:
- 5.0.3
 
- 
isStaticClassDetermine if the supplied class is a static class.- Returns:
- trueif the supplied class is a static class
- Since:
- 6.0
- See Also:
 
- 
isInnerClassDetermine if the supplied class is an inner class, i.e. a non-static member of an enclosing class.- Returns:
- trueif the supplied class is an inner class
- Since:
- 5.0.5
- See Also:
 
- 
isLambdaClassDetermine if the suppliedClassis a JVM-generated implementation class for a lambda expression or method reference.This method makes a best-effort attempt at determining this, based on checks that work on modern, mainstream JVMs. - Parameters:
- clazz- the class to check
- Returns:
- trueif the class is a lambda implementation class
- Since:
- 5.3.19
 
- 
isCglibProxyDeprecated.as of 5.2, in favor of custom (possibly narrower) checks such as for a Spring AOP proxyCheck whether the given object is a CGLIB proxy.- Parameters:
- object- the object to check
- See Also:
 
- 
isCglibProxyClassDeprecated.as of 5.2, in favor of custom (possibly narrower) checks or simply a check for containingCGLIB_CLASS_SEPARATORCheck whether the specified class is a CGLIB-generated class.- Parameters:
- clazz- the class to check
- See Also:
 
- 
isCglibProxyClassNameDeprecated.as of 5.2, in favor of custom (possibly narrower) checks or simply a check for containingCGLIB_CLASS_SEPARATORCheck whether the specified class name is a CGLIB-generated class.- Parameters:
- className- the class name to check
- See Also:
 
- 
getUserClassReturn the user-defined class for the given instance: usually simply the class of the given instance, but the original class in case of a CGLIB-generated subclass.- Parameters:
- instance- the instance to check
- Returns:
- the user-defined class
 
- 
getUserClassReturn the user-defined class for the given class: usually simply the given class, but the original class in case of a CGLIB-generated subclass.- Parameters:
- clazz- the class to check
- Returns:
- the user-defined class
- See Also:
 
- 
getDescriptiveTypeReturn a descriptive name for the given object's type: usually simply the class name, but component type class name + "[]" for arrays, and an appended list of implemented interfaces for JDK proxies.- Parameters:
- value- the value to introspect
- Returns:
- the qualified name of the class
 
- 
matchesTypeNameCheck whether the given class matches the user-specified type name.- Parameters:
- clazz- the class to check
- typeName- the type name to match
 
- 
getShortNameGet the class name without the qualified package name.- Parameters:
- className- the className to get the short name for
- Returns:
- the class name of the class without the package name
- Throws:
- IllegalArgumentException- if the className is empty
 
- 
getShortNameGet the class name without the qualified package name.- Parameters:
- clazz- the class to get the short name for
- Returns:
- the class name of the class without the package name
 
- 
getShortNameAsPropertyReturn the short string name of a Java class in uncapitalized JavaBeans property format. Strips the outer class name in case of a nested class.- Parameters:
- clazz- the class
- Returns:
- the short name rendered in a standard JavaBeans property format
- See Also:
 
- 
getClassFileNameDetermine the name of the class file, relative to the containing package: e.g. "String.class"- Parameters:
- clazz- the class
- Returns:
- the file name of the ".class" file
 
- 
getPackageNameDetermine the name of the package of the given class, e.g. "java.lang" for thejava.lang.Stringclass.- Parameters:
- clazz- the class
- Returns:
- the package name, or the empty String if the class is defined in the default package
 
- 
getPackageNameDetermine the name of the package of the given fully-qualified class name, e.g. "java.lang" for thejava.lang.Stringclass name.- Parameters:
- fqClassName- the fully-qualified class name
- Returns:
- the package name, or the empty String if the class is defined in the default package
 
- 
getQualifiedNameReturn the qualified name of the given class: usually simply the class name, but component type class name + "[]" for arrays.- Parameters:
- clazz- the class
- Returns:
- the qualified name of the class
 
- 
getQualifiedMethodNameReturn the qualified name of the given method, consisting of fully qualified interface/class name + "." + method name.- Parameters:
- method- the method
- Returns:
- the qualified name of the method
 
- 
getQualifiedMethodNameReturn the qualified name of the given method, consisting of fully qualified interface/class name + "." + method name.- Parameters:
- method- the method
- clazz- the clazz that the method is being invoked on (can be- nullto indicate the method's declaring class)
- Returns:
- the qualified name of the method
- Since:
- 4.3.4
 
- 
hasConstructorDetermine whether the given class has a public constructor with the given signature.Essentially translates NoSuchMethodExceptionto "false".- Parameters:
- clazz- the clazz to analyze
- paramTypes- the parameter types of the method
- Returns:
- whether the class has a corresponding constructor
- See Also:
 
- 
getConstructorIfAvailable@Nullable public static <T> Constructor<T> getConstructorIfAvailable(Class<T> clazz, Class<?>... paramTypes) Determine whether the given class has a public constructor with the given signature, and return it if available (else returnnull).Essentially translates NoSuchMethodExceptiontonull.- Parameters:
- clazz- the clazz to analyze
- paramTypes- the parameter types of the method
- Returns:
- the constructor, or nullif not found
- See Also:
 
- 
hasMethodDetermine whether the given class has a public method with the given signature.- Parameters:
- clazz- the clazz to analyze
- method- the method to look for
- Returns:
- whether the class has a corresponding method
- Since:
- 5.2.3
 
- 
hasMethodDetermine whether the given class has a public method with the given signature.Essentially translates NoSuchMethodExceptionto "false".- Parameters:
- clazz- the clazz to analyze
- methodName- the name of the method
- paramTypes- the parameter types of the method
- Returns:
- whether the class has a corresponding method
- See Also:
 
- 
getMethodDetermine whether the given class has a public method with the given signature, and return it if available (else throws anIllegalStateException).In case of any signature specified, only returns the method if there is a unique candidate, i.e. a single public method with the specified name. Essentially translates NoSuchMethodExceptiontoIllegalStateException.- Parameters:
- clazz- the clazz to analyze
- methodName- the name of the method
- paramTypes- the parameter types of the method (can be- nullto indicate any signature)
- Returns:
- the method (never null)
- Throws:
- IllegalStateException- if the method has not been found
- See Also:
 
- 
getMethodIfAvailable@Nullable public static Method getMethodIfAvailable(Class<?> clazz, String methodName, @Nullable Class<?>... paramTypes) Determine whether the given class has a public method with the given signature, and return it if available (else returnnull).In case of any signature specified, only returns the method if there is a unique candidate, i.e. a single public method with the specified name. Essentially translates NoSuchMethodExceptiontonull.- Parameters:
- clazz- the clazz to analyze
- methodName- the name of the method
- paramTypes- the parameter types of the method (can be- nullto indicate any signature)
- Returns:
- the method, or nullif not found
- See Also:
 
- 
getMethodCountForNameReturn the number of methods with a given name (with any argument types), for the given class and/or its superclasses. Includes non-public methods.- Parameters:
- clazz- the clazz to check
- methodName- the name of the method
- Returns:
- the number of methods with the given name
 
- 
hasAtLeastOneMethodWithNameDoes the given class or one of its superclasses at least have one or more methods with the supplied name (with any argument types)? Includes non-public methods.- Parameters:
- clazz- the clazz to check
- methodName- the name of the method
- Returns:
- whether there is at least one method with the given name
 
- 
getMostSpecificMethodGiven a method, which may come from an interface, and a target class used in the current reflective invocation, find the corresponding target method if there is one — for example, the method may beIFoo.bar(), and the target class may beDefaultFoo. In this case, the method may beDefaultFoo.bar(). This enables attributes on that method to be found.NOTE: In contrast to AopUtils.getMostSpecificMethod(java.lang.reflect.Method, java.lang.Class<?>), this method does not resolve bridge methods automatically. CallBridgeMethodResolver.findBridgedMethod(java.lang.reflect.Method)if bridge method resolution is desirable — for example, to obtain metadata from the original method definition.NOTE: If Java security settings disallow reflective access — for example, calls to Class#getDeclaredMethods, etc. — this implementation will fall back to returning the originally provided method.- Parameters:
- method- the method to be invoked, which may come from an interface
- targetClass- the target class for the current invocation (can be- nullor may not even implement the method)
- Returns:
- the specific target method, or the original method if the
 targetClassdoes not implement it
- See Also:
 
- 
getInterfaceMethodIfPossibleDeprecated.in favor ofgetInterfaceMethodIfPossible(Method, Class)Determine a corresponding interface method for the given method handle, if possible.This is particularly useful for arriving at a public exported type on Jigsaw which can be reflectively invoked without an illegal access warning. - Parameters:
- method- the method to be invoked, potentially from an implementation class
- Returns:
- the corresponding interface method, or the original method if none found
- Since:
- 5.1
 
- 
getInterfaceMethodIfPossibleDetermine a corresponding interface method for the given method handle, if possible.This is particularly useful for arriving at a public exported type on Jigsaw which can be reflectively invoked without an illegal access warning. - Parameters:
- method- the method to be invoked, potentially from an implementation class
- targetClass- the target class to check for declared interfaces
- Returns:
- the corresponding interface method, or the original method if none found
- Since:
- 5.3.16
- See Also:
 
- 
isUserLevelMethodDetermine whether the given method is declared by the user or at least pointing to a user-declared method.Checks Method.isSynthetic()(for implementation methods) as well as theGroovyObjectinterface (for interface methods; on an implementation class, implementations of theGroovyObjectmethods will be marked as synthetic anyway). Note that, despite being synthetic, bridge methods (Method.isBridge()) are considered as user-level methods since they are eventually pointing to a user-declared generic method.- Parameters:
- method- the method to check
- Returns:
- trueif the method can be considered as user-declared;- falseotherwise
 
- 
getStaticMethodReturn a public static method of a class.- Parameters:
- clazz- the class which defines the method
- methodName- the static method name
- args- the parameter types to the method
- Returns:
- the static method, or nullif no static method was found
- Throws:
- IllegalArgumentException- if the method name is blank or the clazz is null
 
 
- 
getInterfaceMethodIfPossible(Method, Class)