|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.util.ClassUtils
public abstract class ClassUtils
Miscellaneous class utility methods. Mainly for internal use within the framework; consider Jakarta's Commons Lang for a more comprehensive suite of class utilities.
TypeUtils
,
ReflectionUtils
Field Summary | |
---|---|
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 Summary | |
---|---|
ClassUtils()
|
Method Summary | |
---|---|
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 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 |
forName(String name)
Replacement for Class.forName() that also returns Class instances
for primitives (like "int") and array class names (like "String[]"). |
static Class |
forName(String name,
ClassLoader classLoader)
Replacement for Class.forName() that also returns Class instances
for primitives (like "int") and array class names (like "String[]"). |
static Class[] |
getAllInterfaces(Object instance)
Return all interfaces that the given instance implements as array, including ones implemented by superclasses. |
static Set |
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 |
getAllInterfacesForClassAsSet(Class clazz)
Return all interfaces that the given class implements as Set, including ones implemented by superclasses. |
static Set |
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 Constructor |
getConstructorIfAvailable(Class clazz,
Class[] paramTypes)
Determine whether the given class has a 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 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 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 |
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 decapitalized JavaBeans property format. |
static Method |
getStaticMethod(Class clazz,
String methodName,
Class[] args)
Return a 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 and/or its superclasses at least have one or more methods (with any argument types)? |
static boolean |
hasConstructor(Class clazz,
Class[] paramTypes)
Determine whether the given class has a constructor with the given signature. |
static boolean |
hasMethod(Class clazz,
String methodName,
Class[] paramTypes)
Determine whether the given class has a 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. whether it is loaded by the given ClassLoader or a parent of it. |
static boolean |
isPresent(String className)
Deprecated. as of Spring 2.5, in favor of isPresent(String, ClassLoader) |
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 |
isVisible(Class clazz,
ClassLoader classLoader)
Check whether the given class is visible in the given ClassLoader. |
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. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final String ARRAY_SUFFIX
public static final String CGLIB_CLASS_SEPARATOR
public static final String CLASS_FILE_SUFFIX
Constructor Detail |
---|
public ClassUtils()
Method Detail |
---|
public static 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 ClassLoader overrideThreadContextClassLoader(ClassLoader classLoaderToUse)
classLoaderToUse
- the actual ClassLoader to use for the thread context
null
if not overriddenpublic static Class forName(String name) throws ClassNotFoundException, LinkageError
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 Class
ClassNotFoundException
- if the class was not found
LinkageError
- if the class file could not be loadedClass.forName(String, boolean, ClassLoader)
,
getDefaultClassLoader()
public static Class forName(String name, ClassLoader classLoader) throws ClassNotFoundException, LinkageError
Class.forName()
that also returns Class instances
for primitives (like "int") and array class names (like "String[]").
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 found
LinkageError
- 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(java.lang.String)
.
name
- the name of the potentially primitive class
null
if the name does not denote
a primitive class or primitive array classpublic static boolean isPresent(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 check
public 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 check
public static Class getUserClass(Class clazz)
clazz
- the class to check
public 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 for
IllegalArgumentException
- if the className is emptypublic static String getShortName(Class clazz)
clazz
- the class to get the short name for
public static String getShortNameAsProperty(Class clazz)
clazz
- the class
Introspector.decapitalize(String)
public static String getClassFileName(Class clazz)
clazz
- the class
public static String getPackageName(Class clazz)
java.lang.String
class.
clazz
- the class
public static String getQualifiedName(Class clazz)
clazz
- the class
public static String getQualifiedMethodName(Method method)
method
- the method
public static String getDescriptiveType(Object value)
value
- the value to introspect
public static boolean hasConstructor(Class clazz, Class[] paramTypes)
Essentially translates NoSuchMethodException
to "false".
clazz
- the clazz to analyzeparamTypes
- the parameter types of the method
Class.getMethod(java.lang.String, java.lang.Class>...)
public static Constructor getConstructorIfAvailable(Class clazz, Class[] paramTypes)
null
).
Essentially translates NoSuchMethodException
to null
.
clazz
- the clazz to analyzeparamTypes
- the parameter types of the method
null
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 method
Class.getMethod(java.lang.String, java.lang.Class>...)
public static Method getMethodIfAvailable(Class clazz, String methodName, Class[] paramTypes)
null
).
Essentially translates NoSuchMethodException
to null
.
clazz
- the clazz to analyzemethodName
- the name of the methodparamTypes
- the parameter types of the method
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 method
public static boolean hasAtLeastOneMethodWithName(Class clazz, String methodName)
clazz
- the clazz to checkmethodName
- the name of the method
public 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 AopUtils.getMostSpecificMethod(java.lang.reflect.Method, java.lang.Class)
,
this method does not resolve Java 5 bridge methods automatically.
Call BridgeMethodResolver.findBridgedMethod(java.lang.reflect.Method)
if bridge method resolution is desirable (e.g. for obtaining metadata from
the original method definition).
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 null
AopUtils.getMostSpecificMethod(java.lang.reflect.Method, java.lang.Class)
public static Method getStaticMethod(Class clazz, String methodName, Class[] args)
methodName
- the static method nameclazz
- the class which defines the methodargs
- the parameter types to the method
null
if no static method was found
IllegalArgumentException
- if the method name is blank or the clazz is nullpublic static boolean isPrimitiveWrapper(Class clazz)
clazz
- the class to check
public static boolean isPrimitiveOrWrapper(Class clazz)
clazz
- the class to check
public static boolean isPrimitiveArray(Class clazz)
clazz
- the class to check
public static boolean isPrimitiveWrapperArray(Class clazz)
clazz
- the class to check
public static boolean isAssignable(Class lhsType, Class rhsType)
lhsType
- the target typerhsType
- the value type that should be assigned to the target type
TypeUtils.isAssignable(java.lang.reflect.Type, java.lang.reflect.Type)
public static boolean isAssignableValue(Class type, Object value)
type
- the target typevalue
- the value that should be assigned to the type
public static String convertResourcePathToClassName(String resourcePath)
resourcePath
- the resource path pointing to a class
public static String convertClassNameToResourcePath(String className)
className
- the fully qualified class name
public 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 necesssary, 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 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 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[] getAllInterfaces(Object instance)
instance
- the instance to analyse for interfaces
public static Class[] getAllInterfacesForClass(Class clazz)
If the class itself is an interface, it gets returned as sole interface.
clazz
- the class to analyse for interfaces
public static Class[] getAllInterfacesForClass(Class clazz, ClassLoader classLoader)
If the class itself is an interface, it gets returned as sole interface.
clazz
- the class to analyse for interfacesclassLoader
- the ClassLoader that the interfaces need to be visible in
(may be null
when accepting all declared interfaces)
public static Set getAllInterfacesAsSet(Object instance)
instance
- the instance to analyse for interfaces
public static Set getAllInterfacesForClassAsSet(Class clazz)
If the class itself is an interface, it gets returned as sole interface.
clazz
- the class to analyse for interfaces
public static Set getAllInterfacesForClassAsSet(Class clazz, ClassLoader classLoader)
If the class itself is an interface, it gets returned as sole interface.
clazz
- the class to analyse 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 in
Proxy.getProxyClass(java.lang.ClassLoader, java.lang.Class>...)
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
)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |