public abstract class ClassUtils
extends java.lang.Object
TypeUtils
,
ReflectionUtils
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
ARRAY_SUFFIX
Suffix for array class names: "[]"
|
static java.lang.String |
CGLIB_CLASS_SEPARATOR
The CGLIB class separator character "$$"
|
static java.lang.String |
CLASS_FILE_SUFFIX
The ".class" file suffix
|
Constructor and Description |
---|
ClassUtils() |
Modifier and Type | Method and Description |
---|---|
static java.lang.String |
addResourcePathToPackagePath(java.lang.Class<?> clazz,
java.lang.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 java.lang.String |
classNamesToString(java.lang.Class... classes)
Build a String that consists of the names of the classes/interfaces in the given array.
|
static java.lang.String |
classNamesToString(java.util.Collection<java.lang.Class> classes)
Build a String that consists of the names of the classes/interfaces in the given collection.
|
static java.lang.String |
classPackageAsResourcePath(java.lang.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 java.lang.String |
convertClassNameToResourcePath(java.lang.String className)
Convert a "."-based fully qualified class name to a "/"-based resource path.
|
static java.lang.String |
convertResourcePathToClassName(java.lang.String resourcePath)
Convert a "/"-based resource path to a "."-based fully qualified class name.
|
static java.lang.Class<?> |
createCompositeInterface(java.lang.Class<?>[] interfaces,
java.lang.ClassLoader classLoader)
Create a composite interface Class for the given interfaces, implementing the given interfaces in one single
Class.
|
static java.lang.Class<?> |
forName(java.lang.String name)
Deprecated.
as of Spring 3.0, in favor of specifying a ClassLoader explicitly: see
forName(String, ClassLoader) |
static java.lang.Class<?> |
forName(java.lang.String name,
java.lang.ClassLoader classLoader)
Replacement for
Class.forName() that also returns Class instances for primitives (e.g."int") and
array class names (e.g. |
static java.lang.Class[] |
getAllInterfaces(java.lang.Object instance)
Return all interfaces that the given instance implements as array, including ones implemented by superclasses.
|
static java.util.Set<java.lang.Class> |
getAllInterfacesAsSet(java.lang.Object instance)
Return all interfaces that the given instance implements as Set, including ones implemented by superclasses.
|
static java.lang.Class<?>[] |
getAllInterfacesForClass(java.lang.Class<?> clazz)
Return all interfaces that the given class implements as array, including ones implemented by superclasses.
|
static java.lang.Class<?>[] |
getAllInterfacesForClass(java.lang.Class<?> clazz,
java.lang.ClassLoader classLoader)
Return all interfaces that the given class implements as array, including ones implemented by superclasses.
|
static java.util.Set<java.lang.Class> |
getAllInterfacesForClassAsSet(java.lang.Class clazz)
Return all interfaces that the given class implements as Set, including ones implemented by superclasses.
|
static java.util.Set<java.lang.Class> |
getAllInterfacesForClassAsSet(java.lang.Class clazz,
java.lang.ClassLoader classLoader)
Return all interfaces that the given class implements as Set, including ones implemented by superclasses.
|
static java.lang.String |
getClassFileName(java.lang.Class<?> clazz)
Determine the name of the class file, relative to the containing package: e.g.
|
static <T> java.lang.reflect.Constructor<T> |
getConstructorIfAvailable(java.lang.Class<T> clazz,
java.lang.Class<?>... paramTypes)
Determine whether the given class has a public constructor with the given signature, and return it if available
(else return
null ). |
static java.lang.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 java.lang.String |
getDescriptiveType(java.lang.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 java.lang.reflect.Method |
getMethod(java.lang.Class<?> clazz,
java.lang.String methodName,
java.lang.Class<?>... paramTypes)
Determine whether the given class has a method with the given signature, and return it if available (else throws
an
IllegalStateException ). |
static int |
getMethodCountForName(java.lang.Class<?> clazz,
java.lang.String methodName)
Return the number of methods with a given name (with any argument types), for the given class and/or its
superclasses.
|
static java.lang.reflect.Method |
getMethodIfAvailable(java.lang.Class<?> clazz,
java.lang.String methodName,
java.lang.Class<?>... paramTypes)
Determine whether the given class has a method with the given signature, and return it if available (else return
null ). |
static java.lang.String |
getPackageName(java.lang.Class<?> clazz)
Determine the name of the package of the given class: e.g.
|
static java.lang.String |
getQualifiedMethodName(java.lang.reflect.Method method)
Return the qualified name of the given method, consisting of fully qualified interface/class name + "." + method
name.
|
static java.lang.String |
getQualifiedName(java.lang.Class<?> clazz)
Return the qualified name of the given class: usually simply the class name, but component type class name + "[]"
for arrays.
|
static java.lang.String |
getShortName(java.lang.Class<?> clazz)
Get the class name without the qualified package name.
|
static java.lang.String |
getShortName(java.lang.String className)
Get the class name without the qualified package name.
|
static java.lang.reflect.Method |
getStaticMethod(java.lang.Class<?> clazz,
java.lang.String methodName,
java.lang.Class<?>... args)
Return a public static method of a class.
|
static java.lang.Class<?> |
getUserClass(java.lang.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 java.lang.Class<?> |
getUserClass(java.lang.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(java.lang.Class<?> clazz,
java.lang.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 boolean |
hasConstructor(java.lang.Class<?> clazz,
java.lang.Class<?>... paramTypes)
Determine whether the given class has a public constructor with the given signature.
|
static boolean |
hasMethod(java.lang.Class<?> clazz,
java.lang.String methodName,
java.lang.Class<?>... paramTypes)
Determine whether the given class has a method with the given signature.
|
static boolean |
isAssignable(java.lang.Class<?> lhsType,
java.lang.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(java.lang.Class<?> type,
java.lang.Object value)
Determine if the given type is assignable from the given value, assuming setting by reflection.
|
static boolean |
isCacheSafe(java.lang.Class<?> clazz,
java.lang.ClassLoader classLoader)
Check whether the given class is cache-safe in the given context, i.e.
|
static boolean |
isPresent(java.lang.String className)
Deprecated.
as of Spring 2.5, in favor of
isPresent(String, ClassLoader) |
static boolean |
isPresent(java.lang.String className,
java.lang.ClassLoader classLoader)
Determine whether the
Class identified by the supplied name is present and can be loaded. |
static boolean |
isPrimitiveArray(java.lang.Class<?> clazz)
Check if the given class represents an array of primitives, i.e.
|
static boolean |
isPrimitiveOrWrapper(java.lang.Class<?> clazz)
Check if the given class represents a primitive (i.e.
|
static boolean |
isPrimitiveWrapper(java.lang.Class<?> clazz)
Check if the given class represents a primitive wrapper, i.e.
|
static boolean |
isPrimitiveWrapperArray(java.lang.Class<?> clazz)
Check if the given class represents an array of primitive wrappers, i.e.
|
static boolean |
isVisible(java.lang.Class<?> clazz,
java.lang.ClassLoader classLoader)
Check whether the given class is visible in the given ClassLoader.
|
static boolean |
matchesTypeName(java.lang.Class<?> clazz,
java.lang.String typeName)
Check whether the given class matches the user-specified type name.
|
static java.lang.ClassLoader |
overrideThreadContextClassLoader(java.lang.ClassLoader classLoaderToUse)
Override the thread context ClassLoader with the environment's bean ClassLoader if necessary, i.e.
|
static java.lang.Class<?> |
resolveClassName(java.lang.String className,
java.lang.ClassLoader classLoader)
Resolve the given class name into a Class instance.
|
static java.lang.Class<?> |
resolvePrimitiveClassName(java.lang.String name)
Resolve the given class name as primitive class, if appropriate, according to the JVM's naming rules for
primitive classes.
|
static java.lang.Class<?> |
resolvePrimitiveIfNecessary(java.lang.Class<?> clazz)
Resolve the given class if it is a primitive class, returning the corresponding primitive wrapper type instead.
|
public static final java.lang.String ARRAY_SUFFIX
public static final java.lang.String CGLIB_CLASS_SEPARATOR
public static final java.lang.String CLASS_FILE_SUFFIX
public static java.lang.ClassLoader getDefaultClassLoader()
Call this method if you intend to use the thread context ClassLoader in a scenario where you absolutely need 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
)Thread.getContextClassLoader()
public static java.lang.ClassLoader overrideThreadContextClassLoader(java.lang.ClassLoader classLoaderToUse)
classLoaderToUse
- the actual ClassLoader to use for the thread contextnull
if not overridden@Deprecated public static java.lang.Class<?> forName(java.lang.String name) throws java.lang.ClassNotFoundException, java.lang.LinkageError
forName(String, ClassLoader)
Class.forName()
that also returns Class instances for primitives (like "int") and
array class names (like "String[]").
Always uses the default class loader: that is, preferably the thread context class loader, or the ClassLoader that loaded the ClassUtils class as fallback.
name
- the name of the Classjava.lang.ClassNotFoundException
- if the class was not foundjava.lang.LinkageError
- if the class file could not be loadedClass.forName(String, boolean, ClassLoader)
,
getDefaultClassLoader()
public static java.lang.Class<?> forName(java.lang.String name, java.lang.ClassLoader classLoader) throws java.lang.ClassNotFoundException, java.lang.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)java.lang.ClassNotFoundException
- if the class was not foundjava.lang.LinkageError
- if the class file could not be loadedClass.forName(String, boolean, ClassLoader)
public static java.lang.Class<?> resolveClassName(java.lang.String className, java.lang.ClassLoader classLoader) throws java.lang.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)java.lang.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 java.lang.Class<?> resolvePrimitiveClassName(java.lang.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 class@Deprecated public static boolean isPresent(java.lang.String className)
isPresent(String, 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 checkpublic static boolean isPresent(java.lang.String className, java.lang.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 java.lang.Class<?> getUserClass(java.lang.Object instance)
instance
- the instance to checkpublic static java.lang.Class<?> getUserClass(java.lang.Class<?> clazz)
clazz
- the class to checkpublic static boolean isCacheSafe(java.lang.Class<?> clazz, java.lang.ClassLoader classLoader)
clazz
- the class to analyzeclassLoader
- the ClassLoader to potentially cache metadata inpublic static java.lang.String getShortName(java.lang.String className)
className
- the className to get the short name forjava.lang.IllegalArgumentException
- if the className is emptypublic static java.lang.String getShortName(java.lang.Class<?> clazz)
clazz
- the class to get the short name forpublic static java.lang.String getClassFileName(java.lang.Class<?> clazz)
clazz
- the classpublic static java.lang.String getPackageName(java.lang.Class<?> clazz)
java.lang.String
class.clazz
- the classpublic static java.lang.String getQualifiedName(java.lang.Class<?> clazz)
clazz
- the classpublic static java.lang.String getQualifiedMethodName(java.lang.reflect.Method method)
method
- the methodpublic static java.lang.String getDescriptiveType(java.lang.Object value)
value
- the value to introspectpublic static boolean matchesTypeName(java.lang.Class<?> clazz, java.lang.String typeName)
clazz
- the class to checktypeName
- the type name to matchpublic static boolean hasConstructor(java.lang.Class<?> clazz, java.lang.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> java.lang.reflect.Constructor<T> getConstructorIfAvailable(java.lang.Class<T> clazz, java.lang.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(java.lang.Class<?> clazz, java.lang.String methodName, java.lang.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 java.lang.reflect.Method getMethod(java.lang.Class<?> clazz, java.lang.String methodName, java.lang.Class<?>... paramTypes)
IllegalStateException
).
Essentially translates NoSuchMethodException
to IllegalStateException
.
clazz
- the clazz to analyzemethodName
- the name of the methodparamTypes
- the parameter types of the methodnull
)java.lang.IllegalStateException
- if the method has not been foundClass.getMethod(java.lang.String, java.lang.Class<?>...)
public static java.lang.reflect.Method getMethodIfAvailable(java.lang.Class<?> clazz, java.lang.String methodName, java.lang.Class<?>... paramTypes)
null
).
Essentially translates NoSuchMethodException
to null
.
clazz
- the clazz to analyzemethodName
- the name of the methodparamTypes
- the parameter types of the methodnull
if not foundClass.getMethod(java.lang.String, java.lang.Class<?>...)
public static int getMethodCountForName(java.lang.Class<?> clazz, java.lang.String methodName)
clazz
- the clazz to checkmethodName
- the name of the methodpublic static boolean hasAtLeastOneMethodWithName(java.lang.Class<?> clazz, java.lang.String methodName)
clazz
- the clazz to checkmethodName
- the name of the methodpublic static java.lang.reflect.Method getStaticMethod(java.lang.Class<?> clazz, java.lang.String methodName, java.lang.Class<?>... args)
methodName
- the static method nameclazz
- the class which defines the methodargs
- the parameter types to the methodnull
if no static method was foundjava.lang.IllegalArgumentException
- if the method name is blank or the clazz is nullpublic static boolean isPrimitiveWrapper(java.lang.Class<?> clazz)
clazz
- the class to checkpublic static boolean isPrimitiveOrWrapper(java.lang.Class<?> clazz)
clazz
- the class to checkpublic static boolean isPrimitiveArray(java.lang.Class<?> clazz)
clazz
- the class to checkpublic static boolean isPrimitiveWrapperArray(java.lang.Class<?> clazz)
clazz
- the class to checkpublic static java.lang.Class<?> resolvePrimitiveIfNecessary(java.lang.Class<?> clazz)
clazz
- the class to checkpublic static boolean isAssignable(java.lang.Class<?> lhsType, java.lang.Class<?> rhsType)
lhsType
- the target typerhsType
- the value type that should be assigned to the target typeTypeUtils.isAssignable(java.lang.reflect.Type, java.lang.reflect.Type)
public static boolean isAssignableValue(java.lang.Class<?> type, java.lang.Object value)
type
- the target typevalue
- the value that should be assigned to the typepublic static java.lang.String convertResourcePathToClassName(java.lang.String resourcePath)
resourcePath
- the resource path pointing to a classpublic static java.lang.String convertClassNameToResourcePath(java.lang.String className)
className
- the fully qualified class namepublic static java.lang.String addResourcePathToPackagePath(java.lang.Class<?> clazz, java.lang.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. 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 java.lang.String classPackageAsResourcePath(java.lang.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 java.lang.String classNamesToString(java.lang.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 java.lang.String classNamesToString(java.util.Collection<java.lang.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 java.lang.Class[] getAllInterfaces(java.lang.Object instance)
instance
- the instance to analyze for interfacespublic static java.lang.Class<?>[] getAllInterfacesForClass(java.lang.Class<?> clazz)
If the class itself is an interface, it gets returned as sole interface.
clazz
- the class to analyze for interfacespublic static java.lang.Class<?>[] getAllInterfacesForClass(java.lang.Class<?> clazz, java.lang.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 java.util.Set<java.lang.Class> getAllInterfacesAsSet(java.lang.Object instance)
instance
- the instance to analyze for interfacespublic static java.util.Set<java.lang.Class> getAllInterfacesForClassAsSet(java.lang.Class clazz)
If the class itself is an interface, it gets returned as sole interface.
clazz
- the class to analyze for interfacespublic static java.util.Set<java.lang.Class> getAllInterfacesForClassAsSet(java.lang.Class clazz, java.lang.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 java.lang.Class<?> createCompositeInterface(java.lang.Class<?>[] interfaces, java.lang.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 boolean isVisible(java.lang.Class<?> clazz, java.lang.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
)