public abstract class ClassUtils extends Object
TypeUtils,
ReflectionUtils| Modifier and Type | Field and Description |
|---|---|
static String |
ARRAY_SUFFIX
Suffix for array class names: "[]"
|
static String |
CGLIB_CLASS_SEPARATOR
The CGLIB class separator character "$$"
|
static String |
CLASS_FILE_SUFFIX
The ".class" file suffix
|
| Constructor and Description |
|---|
ClassUtils() |
| Modifier and Type | Method and Description |
|---|---|
static String |
addResourcePathToPackagePath(Class<?> clazz,
String resourceName)
Return a path suitable for use with
ClassLoader.getResource (also
suitable for use with Class.getResource by prepending a slash
('/') to the return value). |
static String |
classNamesToString(Class<?>... classes)
Build a String that consists of the names of the classes/interfaces in
the given array.
|
static String |
classNamesToString(Collection<Class<?>> classes)
Build a String that consists of the names of the classes/interfaces in
the given collection.
|
static String |
classPackageAsResourcePath(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 String |
convertClassNameToResourcePath(String className)
Convert a "."
|
static String |
convertResourcePathToClassName(String resourcePath)
Convert a "/"-based resource path to a "."
|
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 for
Class.forName() that also returns Class instances
for primitives (e.g. |
static Class<?>[] |
getAllInterfaces(Object instance)
Return all interfaces that the given instance implements as array,
including ones implemented by superclasses.
|
static Set<Class<?>> |
getAllInterfacesAsSet(Object instance)
Return all interfaces that the given instance implements as Set,
including ones implemented by superclasses.
|
static Class<?>[] |
getAllInterfacesForClass(Class<?> clazz)
Return all interfaces that the given class implements as array, including
ones implemented by superclasses.
|
static Class<?>[] |
getAllInterfacesForClass(Class<?> clazz,
ClassLoader classLoader)
Return all interfaces that the given class implements as array, including
ones implemented by superclasses.
|
static Set<Class<?>> |
getAllInterfacesForClassAsSet(Class<?> clazz)
Return all interfaces that the given class implements as Set, including
ones implemented by superclasses.
|
static Set<Class<?>> |
getAllInterfacesForClassAsSet(Class<?> clazz,
ClassLoader classLoader)
Return all interfaces that the given class implements as Set, including
ones implemented by superclasses.
|
static String |
getClassFileName(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 return
null). |
static ClassLoader |
getDefaultClassLoader()
Return 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 String |
getDescriptiveType(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 Method |
getMethod(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 throws an
IllegalStateException). |
static int |
getMethodCountForName(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 Method |
getMethodIfAvailable(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 return
null). |
static Method |
getMostSpecificMethod(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.
|
static String |
getPackageName(Class<?> clazz)
Determine the name of the package of the given class, e.g.
|
static String |
getPackageName(String fqClassName)
Determine the name of the package of the given fully-qualified class
name, e.g.
|
static String |
getQualifiedMethodName(Method method)
Return the qualified name of the given method, consisting of fully
qualified interface/class name + "." + method name.
|
static String |
getQualifiedName(Class<?> clazz)
Return the qualified name of the given class: usually simply the class
name, but component type class name + "[]" for arrays.
|
static String |
getShortName(Class<?> clazz)
Get the class name without the qualified package name.
|
static String |
getShortName(String className)
Get the class name without the qualified package name.
|
static String |
getShortNameAsProperty(Class<?> clazz)
Return the short string name of a Java class in uncapitalized JavaBeans
property format.
|
static Method |
getStaticMethod(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 boolean |
hasAtLeastOneMethodWithName(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)?
|
static boolean |
hasConstructor(Class<?> clazz,
Class<?>... paramTypes)
Determine whether the given class has a public constructor with the given
signature.
|
static boolean |
hasMethod(Class<?> clazz,
String methodName,
Class<?>... paramTypes)
Determine whether the given class has a public method with the given
signature.
|
static boolean |
isAssignable(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 boolean |
isAssignableValue(Class<?> type,
Object value)
Determine if the given type is assignable from the given value, assuming
setting by reflection.
|
static boolean |
isCacheSafe(Class<?> clazz,
ClassLoader classLoader)
Check whether the given class is cache-safe in the given context, i.e.
|
static boolean |
isCglibProxy(Object object)
Check whether the given object is a CGLIB proxy.
|
static boolean |
isCglibProxyClass(Class<?> clazz)
Check whether the specified class is a CGLIB-generated class.
|
static boolean |
isCglibProxyClassName(String className)
Check whether the specified class name is a CGLIB-generated class.
|
static boolean |
isPresent(String className,
ClassLoader classLoader)
Determine whether the
Class identified by the supplied name is
present and can be loaded. |
static boolean |
isPrimitiveArray(Class<?> clazz)
Check if the given class represents an array of primitives, i.e. boolean,
byte, char, short, int, long, float, or double.
|
static boolean |
isPrimitiveOrWrapper(Class<?> clazz)
Check if the given class represents a primitive (i.e. boolean, byte,
char, short, int, long, float, or double) or a primitive wrapper (i.e.
|
static boolean |
isPrimitiveWrapper(Class<?> clazz)
Check if the given class represents a primitive wrapper, i.e.
|
static boolean |
isPrimitiveWrapperArray(Class<?> clazz)
Check if the given class represents an array of primitive wrappers, i.e.
|
static boolean |
isUserLevelMethod(Method method)
Determine whether the given method is declared by the user or at least
pointing to a user-declared method.
|
static boolean |
isVisible(Class<?> clazz,
ClassLoader classLoader)
Check whether the given class is visible in the given ClassLoader.
|
static boolean |
matchesTypeName(Class<?> clazz,
String typeName)
Check whether the given class matches the user-specified type name.
|
static ClassLoader |
overrideThreadContextClassLoader(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.
|
static Class<?> |
resolveClassName(String className,
ClassLoader classLoader)
Resolve the given class name into a Class instance.
|
static Class<?> |
resolvePrimitiveClassName(String name)
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 given Collection into a Class array.
|
public static final String ARRAY_SUFFIX
public static final String CGLIB_CLASS_SEPARATOR
public static final String CLASS_FILE_SUFFIX
public static ClassLoader getDefaultClassLoader()
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 a null ClassLoader reference
as well).
null if even the system
ClassLoader isn't accessible)Thread.getContextClassLoader(),
ClassLoader.getSystemClassLoader()public static ClassLoader overrideThreadContextClassLoader(ClassLoader classLoaderToUse)
classLoaderToUse - the actual ClassLoader to use for the thread contextnull if not
overriddenpublic static Class<?> forName(String name, ClassLoader classLoader) throws ClassNotFoundException, LinkageError
Class.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 inner class names in Java
source style (e.g. "java.lang.Thread.State" instead of
"java.lang.Thread$State").name - the name of the ClassclassLoader - the class loader to use (may be null, which indicates
the default class loader)ClassNotFoundException - if the class was not foundLinkageError - if the class file could not be loadedClass.forName(String, boolean, ClassLoader)public static Class<?> resolveClassName(String className, ClassLoader classLoader) throws IllegalArgumentException
This is effectively equivalent to the forName method with the
same arguments, with the only difference being the exceptions thrown in
case of class loading failure.
className - the name of the ClassclassLoader - the class loader to use (may be null, which indicates
the default class loader)IllegalArgumentException - if the class name was not resolvable (that is, the class
could not be found or the class file could not be loaded)forName(String, ClassLoader)public static Class<?> resolvePrimitiveClassName(String name)
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).
name - the name of the potentially primitive classnull if the name does not denote
a primitive class or primitive array classpublic static boolean isPresent(String className, ClassLoader classLoader)
Class identified by the supplied name is
present and can be loaded. Will return false if either the class
or one of its dependencies is not present or cannot be loaded.className - the name of the class to checkclassLoader - the class loader to use (may be null, which indicates
the default class loader)public static Class<?> getUserClass(Object instance)
instance - the instance to checkpublic static Class<?> getUserClass(Class<?> clazz)
clazz - the class to checkpublic static boolean isCacheSafe(Class<?> clazz, ClassLoader classLoader)
clazz - the class to analyzeclassLoader - the ClassLoader to potentially cache metadata inpublic static String getShortName(String className)
className - the className to get the short name forIllegalArgumentException - if the className is emptypublic static String getShortName(Class<?> clazz)
clazz - the class to get the short name forpublic static String getShortNameAsProperty(Class<?> clazz)
clazz - the classIntrospector.decapitalize(String)public static String getClassFileName(Class<?> clazz)
clazz - the classpublic static String getPackageName(Class<?> clazz)
java.lang.String class.clazz - the classpublic static String getPackageName(String fqClassName)
java.lang.String class name.fqClassName - the fully-qualified class namepublic static String getQualifiedName(Class<?> clazz)
clazz - the classpublic static String getQualifiedMethodName(Method method)
method - the methodpublic static String getDescriptiveType(Object value)
value - the value to introspectpublic static boolean matchesTypeName(Class<?> clazz, String typeName)
clazz - the class to checktypeName - the type name to matchpublic static boolean hasConstructor(Class<?> clazz, Class<?>... paramTypes)
Essentially translates NoSuchMethodException to "false".
clazz - the clazz to analyzeparamTypes - the parameter types of the methodClass.getMethod(java.lang.String, java.lang.Class<?>...)public static <T> Constructor<T> getConstructorIfAvailable(Class<T> clazz, Class<?>... paramTypes)
null).
Essentially translates NoSuchMethodException to null.
clazz - the clazz to analyzeparamTypes - the parameter types of the methodnull if not foundClass.getConstructor(java.lang.Class<?>...)public static boolean hasMethod(Class<?> clazz, String methodName, Class<?>... paramTypes)
Essentially translates NoSuchMethodException to "false".
clazz - the clazz to analyzemethodName - the name of the methodparamTypes - the parameter types of the methodClass.getMethod(java.lang.String, java.lang.Class<?>...)public static Method getMethod(Class<?> clazz, String methodName, Class<?>... paramTypes)
IllegalStateException).
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 NoSuchMethodException to
IllegalStateException.
clazz - the clazz to analyzemethodName - the name of the methodparamTypes - the parameter types of the method (may be null to
indicate any signature)null)IllegalStateException - if the method has not been foundClass.getMethod(java.lang.String, java.lang.Class<?>...)public static Method getMethodIfAvailable(Class<?> clazz, String methodName, Class<?>... paramTypes)
null).
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 NoSuchMethodException to null.
clazz - the clazz to analyzemethodName - the name of the methodparamTypes - the parameter types of the method (may be null to
indicate any signature)null if not foundClass.getMethod(java.lang.String, java.lang.Class<?>...)public static int getMethodCountForName(Class<?> clazz, String methodName)
clazz - the clazz to checkmethodName - the name of the methodpublic static boolean hasAtLeastOneMethodWithName(Class<?> clazz, String methodName)
clazz - the clazz to checkmethodName - the name of the methodpublic static Method getMostSpecificMethod(Method method, Class<?> targetClass)
IFoo.bar() and the
target class may be DefaultFoo. In this case, the method may be
DefaultFoo.bar(). This enables attributes on that method to be
found.
NOTE: In contrast to
org.springframework.aop.support.AopUtils#getMostSpecificMethod,
this method does not resolve Java 5 bridge methods automatically.
Call
org.springframework.core.BridgeMethodResolver#findBridgedMethod
if bridge method resolution is desirable (e.g. for obtaining metadata
from the original method definition).
NOTE: Since Spring 3.1.1, if Java security settings disallow
reflective access (e.g. calls to Class#getDeclaredMethods etc,
this implementation will fall back to returning the originally provided
method.
method - the method to be invoked, which may come from an interfacetargetClass - the target class for the current invocation. May be
null or may not even implement the method.targetClass doesn't implement it or is nullpublic static boolean isUserLevelMethod(Method method)
Checks Method.isSynthetic() (for implementation methods) as well
as the GroovyObject interface (for interface methods; on an
implementation class, implementations of the GroovyObject methods
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.
method - the method to checktrue if the method can be considered as user-declared;
[@code false} otherwisepublic static Method getStaticMethod(Class<?> clazz, String methodName, Class<?>... args)
clazz - the class which defines the methodmethodName - the static method nameargs - the parameter types to the methodnull if no static method was foundIllegalArgumentException - if the method name is blank or the clazz is nullpublic static boolean isPrimitiveWrapper(Class<?> clazz)
clazz - the class to checkpublic static boolean isPrimitiveOrWrapper(Class<?> clazz)
clazz - the class to checkpublic static boolean isPrimitiveArray(Class<?> clazz)
clazz - the class to checkpublic static boolean isPrimitiveWrapperArray(Class<?> clazz)
clazz - the class to checkpublic static Class<?> resolvePrimitiveIfNecessary(Class<?> clazz)
clazz - the class to checkpublic static boolean isAssignable(Class<?> lhsType, Class<?> rhsType)
lhsType - the target typerhsType - the value type that should be assigned to the target typeTypeUtils#isAssignablepublic static boolean isAssignableValue(Class<?> type, Object value)
type - the target typevalue - the value that should be assigned to the typepublic static String convertResourcePathToClassName(String resourcePath)
resourcePath - the resource path pointing to a classpublic static String convertClassNameToResourcePath(String className)
className - the fully qualified class namepublic static String addResourcePathToPackagePath(Class<?> clazz, String resourceName)
ClassLoader.getResource (also
suitable for use with Class.getResource by 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. org.hotswap.agent.util.spring.io.resource.springframework.core.io.ClassPathResource
is usually even more convenient.clazz - the Class whose package will be used as the baseresourceName - the resource name to append. A leading slash is optional.ClassLoader.getResource(java.lang.String),
Class.getResource(java.lang.String)public static String classPackageAsResourcePath(Class<?> clazz)
ClassLoader.getResource(). For it to be fed to
Class.getResource instead, a leading slash would also have to be
prepended to the returned value.clazz - the input class. A null value or the default (empty)
package will result in an empty string ("") being returned.ClassLoader.getResource(java.lang.String),
Class.getResource(java.lang.String)public static String classNamesToString(Class<?>... classes)
Basically like AbstractCollection.toString(), but stripping the
"class "/"interface " prefix before every class name.
classes - a Collection of Class objects (may be null)AbstractCollection.toString()public static String classNamesToString(Collection<Class<?>> classes)
Basically like AbstractCollection.toString(), but stripping the
"class "/"interface " prefix before every class name.
classes - a Collection of Class objects (may be null)AbstractCollection.toString()public static Class<?>[] toClassArray(Collection<Class<?>> collection)
collection - the Collection to copynull if the passed-in Collection was
null)public static Class<?>[] getAllInterfaces(Object instance)
instance - the instance to analyze for interfacespublic static Class<?>[] getAllInterfacesForClass(Class<?> clazz)
If the class itself is an interface, it gets returned as sole interface.
clazz - the class to analyze for interfacespublic static Class<?>[] getAllInterfacesForClass(Class<?> clazz, ClassLoader classLoader)
If the class itself is an interface, it gets returned as sole interface.
clazz - the class to analyze for interfacesclassLoader - the ClassLoader that the interfaces need to be visible in (may
be null when accepting all declared interfaces)public static Set<Class<?>> getAllInterfacesAsSet(Object instance)
instance - the instance to analyze for interfacespublic static Set<Class<?>> getAllInterfacesForClassAsSet(Class<?> clazz)
If the class itself is an interface, it gets returned as sole interface.
clazz - the class to analyze for interfacespublic static Set<Class<?>> getAllInterfacesForClassAsSet(Class<?> clazz, ClassLoader classLoader)
If the class itself is an interface, it gets returned as sole interface.
clazz - the class to analyze for interfacesclassLoader - the ClassLoader that the interfaces need to be visible in (may
be null when accepting all declared interfaces)public static Class<?> createCompositeInterface(Class<?>[] interfaces, ClassLoader classLoader)
This implementation builds a JDK proxy class for the given interfaces.
interfaces - the interfaces to mergeclassLoader - the ClassLoader to create the composite Class inProxy.getProxyClass(java.lang.ClassLoader, java.lang.Class<?>...)public static Class<?> determineCommonAncestor(Class<?> clazz1, Class<?> clazz2)
clazz1 - the class to introspectclazz2 - the other class to introspectnull if none found. If any of
the given classes is null, the other class will be
returned.public static boolean isVisible(Class<?> clazz, ClassLoader classLoader)
clazz - the class to check (typically an interface)classLoader - the ClassLoader to check against (may be null, in
which case this method will always return true)public static boolean isCglibProxy(Object object)
object - the object to checkorg.springframework.aop.support.AopUtils#isCglibProxy(Object)public static boolean isCglibProxyClass(Class<?> clazz)
clazz - the class to checkpublic static boolean isCglibProxyClassName(String className)
className - the class name to checkCopyright © 2018. All rights reserved.