public class ClassUtil extends Object
Class
处理的工具类。
这个类中的每个方法都可以“安全”地处理 null
,而不会抛出
NullPointerException
。
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 |
---|
ClassUtil() |
Modifier and Type | Method and Description |
---|---|
static int |
checkInterfaceDeepth(Class<?> pInterface,
Class<?> targetClass)
从接口端计算深度
|
static int |
checkSupperClassDeepth(Class<?> supperClass,
Class<?> targetClass) |
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 Class<?> |
getArrayClass(Class<?> componentType)
取得指定一维数组类.
|
static Class<?> |
getArrayClass(Class<?> componentClass,
int dimension)
取得指定维数的
Array 类. |
static String |
getClassFileName(Class clazz)
Determine the name of the class file, relative to the containing
package: e.g.
|
static String |
getFriendlyClassName(Class<?> clazz)
取得友好的类名。
|
static String |
getFriendlyClassName(String javaClassName)
取得友好的类名。
|
static String |
getFriendlyClassNameForObject(Object object)
取得对象所属的类的友好类名。
|
static String |
getPackageName(Class<?> clazz)
取得指定类的package名。
|
static String |
getPackageName(String javaClassName)
取得指定类名的package名。
|
static String |
getPackageNameForObject(Object object)
取得指定对象所属的类的package名。
|
static <T> T |
getPrimitiveDefaultValue(Class<T> type)
取得primitive类型的默认值。如果不是primitive,则返回
null 。 |
static Class<?> |
getPrimitiveType(Class<?> type)
取得primitive类。
|
static Class<?> |
getPrimitiveType(String name)
取得primitive类。
|
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 |
getResourceNameForClass(Class<?> clazz)
取得指定类的资源名。
|
static String |
getResourceNameForClass(String className)
取得指定类的资源名。
|
static String |
getResourceNameForObjectClass(Object object)
取得对象所属的类的资源名。
|
static String |
getResourceNameForObjectPackage(Object object)
取得指定对象所属的类的package名的资源名。
|
static String |
getResourceNameForPackage(Class<?> clazz)
取得指定类的package名的资源名。
|
static String |
getResourceNameForPackage(String className)
取得指定类名的package名的资源名。
|
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 String |
getSimpleClassName(Class<?> clazz)
取得简单类名,不包括package名。
|
static String |
getSimpleClassName(Class<?> clazz,
boolean proccessInnerClass)
取得简单类名,不包括package名。
|
static String |
getSimpleClassName(String javaClassName)
取得类名,不包括package名。
|
static String |
getSimpleClassName(String javaClassName,
boolean proccesInnerClass)
取得类名,不包括package名。
|
static String |
getSimpleClassNameForObject(Object object)
取得指定对象所属的类的简单类名,不包括package名。
|
static String |
getSimpleClassNameForObject(Object object,
boolean processInnerClass)
取得指定对象所属的类的简单类名,不包括package名。
|
static String |
getSimpleMethodSignature(Method method)
取得简洁的method描述。
|
static String |
getSimpleMethodSignature(Method method,
boolean withClassName)
取得简洁的method描述。
|
static String |
getSimpleMethodSignature(Method method,
boolean withModifiers,
boolean withReturnType,
boolean withClassName,
boolean withExceptionType)
取得简洁的method描述。
|
static <T> Class<T> |
getWrapperTypeIfPrimitive(Class<T> type)
取得primitive类型的wrapper。如果不是primitive,则原样返回。
|
static <T> String |
humpString(Class<T> clazz)
采取驼峰规则
|
static boolean |
isAssignable(Class<?>[] classes,
Class<?>[] fromClasses)
检查一组指定类型
fromClasses 的对象是否可以赋值给另一组类型 classes 。 |
static boolean |
isAssignable(Class<?> clazz,
Class<?> fromClass)
检查指定类型
fromClass 的对象是否可以赋值给另一种类型 clazz 。 |
static boolean |
isBasicClass(Class<?> clazz)
判断该类型是不是包装类型
|
static boolean |
isVisible(Class<?> clazz,
ClassLoader classLoader)
Check whether the given class is visible in the given ClassLoader.
|
static String |
locateClass(Class<?> clazz)
在class loader中查找class的位置。
|
static String |
locateClass(String className)
在class loader中查找class的位置。
|
static String |
locateClass(String className,
ClassLoader loader)
在class loader中查找class的位置。
|
public static final String ARRAY_SUFFIX
public static final String CGLIB_CLASS_SEPARATOR
public static final String CLASS_FILE_SUFFIX
public static int checkInterfaceDeepth(Class<?> pInterface, Class<?> targetClass)
pInterface
- targetClass
- public static int checkSupperClassDeepth(Class<?> supperClass, Class<?> targetClass)
supperClass
- targetClass
- public static <T> String humpString(Class<T> clazz)
simpleName
- public static String getFriendlyClassNameForObject(Object object)
类似object.getClass().getName()
,但不同的是,该方法用更友好的方式显示数组类型。 例如:
int[].class.getName() = "[I" ClassUtil.getFriendlyClassName(int[].class) = "int[]" Integer[][].class.getName() = "[[Ljava.lang.Integer;" ClassUtil.getFriendlyClassName(Integer[][].class) = "java.lang.Integer[][]"
对于非数组的类型,该方法等效于 Class.getName()
方法。
注意,该方法所返回的数组类名只能用于显示给人看,不能用于 Class.forName
操作。
object
- 要显示类名的对象null
public static String getFriendlyClassName(Class<?> clazz)
类似clazz.getName()
,但不同的是,该方法用更友好的方式显示数组类型。 例如:
int[].class.getName() = "[I" ClassUtil.getFriendlyClassName(int[].class) = "int[]" Integer[][].class.getName() = "[[Ljava.lang.Integer;" ClassUtil.getFriendlyClassName(Integer[][].class) = "java.lang.Integer[][]"
对于非数组的类型,该方法等效于 Class.getName()
方法。
注意,该方法所返回的数组类名只能用于显示给人看,不能用于 Class.forName
操作。
object
- 要显示类名的对象null
public static String getFriendlyClassName(String javaClassName)
className
必须是从 clazz.getName()
所返回的合法类名。该方法用更友好的方式显示数组类型。 例如:
int[].class.getName() = "[I" ClassUtil.getFriendlyClassName(int[].class) = "int[]" Integer[][].class.getName() = "[[Ljava.lang.Integer;" ClassUtil.getFriendlyClassName(Integer[][].class) = "java.lang.Integer[][]"
对于非数组的类型,该方法等效于 Class.getName()
方法。
注意,该方法所返回的数组类名只能用于显示给人看,不能用于 Class.forName
操作。
javaClassName
- 要转换的类名null
,如果原类名是非法的,则返回原类名public static String getSimpleClassNameForObject(Object object)
此方法可以正确显示数组和内联类的名称。 例如:
ClassUtil.getSimpleClassNameForObject(Boolean.TRUE) = "Boolean" ClassUtil.getSimpleClassNameForObject(new Boolean[10]) = "Boolean[]" ClassUtil.getSimpleClassNameForObject(new int[1][2]) = "int[][]"
本方法和Class.getSimpleName()
的区别在于,本方法会保留inner类的外层类名称。
object
- 要查看的对象null
,则返回 null
public static String getSimpleClassNameForObject(Object object, boolean processInnerClass)
此方法可以正确显示数组和内联类的名称。 例如:
ClassUtil.getSimpleClassNameForObject(Boolean.TRUE) = "Boolean" ClassUtil.getSimpleClassNameForObject(new Boolean[10]) = "Boolean[]" ClassUtil.getSimpleClassNameForObject(new int[1][2]) = "int[][]"
本方法和Class.getSimpleName()
的区别在于,本方法会保留inner类的外层类名称。
object
- 要查看的对象null
,则返回 null
public static String getSimpleClassName(Class<?> clazz)
此方法可以正确显示数组和内联类的名称。 例如:
ClassUtil.getSimpleClassName(Boolean.class) = "Boolean" ClassUtil.getSimpleClassName(Boolean[].class) = "Boolean[]" ClassUtil.getSimpleClassName(int[][].class) = "int[][]" ClassUtil.getSimpleClassName(Map.Entry.class) = "Map.Entry"
本方法和Class.getSimpleName()
的区别在于,本方法会保留inner类的外层类名称。
clazz
- 要查看的类null
,则返回 null
public static String getSimpleClassName(Class<?> clazz, boolean proccessInnerClass)
此方法可以正确显示数组和内联类的名称。 例如:
ClassUtil.getSimpleClassName(Boolean.class) = "Boolean" ClassUtil.getSimpleClassName(Boolean[].class) = "Boolean[]" ClassUtil.getSimpleClassName(int[][].class) = "int[][]" ClassUtil.getSimpleClassName(Map.Entry.class) = "Map.Entry"
本方法和Class.getSimpleName()
的区别在于,本方法会保留inner类的外层类名称。
clazz
- 要查看的类null
,则返回 null
public static String getSimpleClassName(String javaClassName)
此方法可以正确显示数组和内联类的名称。 例如:
ClassUtil.getSimpleClassName(Boolean.class.getName()) = "Boolean" ClassUtil.getSimpleClassName(Boolean[].class.getName()) = "Boolean[]" ClassUtil.getSimpleClassName(int[][].class.getName()) = "int[][]" ClassUtil.getSimpleClassName(Map.Entry.class.getName()) = "Map.Entry"
本方法和Class.getSimpleName()
的区别在于,本方法会保留inner类的外层类名称。
javaClassName
- 要查看的类名null
public static String getSimpleClassName(String javaClassName, boolean proccesInnerClass)
此方法可以正确显示数组和内联类的名称。 例如:
ClassUtil.getSimpleClassName(Boolean.class.getName()) = "Boolean" ClassUtil.getSimpleClassName(Boolean[].class.getName()) = "Boolean[]" ClassUtil.getSimpleClassName(int[][].class.getName()) = "int[][]" ClassUtil.getSimpleClassName(Map.Entry.class.getName()) = "Map.Entry"
本方法和Class.getSimpleName()
的区别在于,本方法会保留inner类的外层类名称。
javaClassName
- 要查看的类名null
public static String getSimpleMethodSignature(Method method)
public static String getSimpleMethodSignature(Method method, boolean withClassName)
public static String getSimpleMethodSignature(Method method, boolean withModifiers, boolean withReturnType, boolean withClassName, boolean withExceptionType)
public static String getPackageNameForObject(Object object)
对于数组,此方法返回的是数组元素类型的package名。
object
- 要查看的对象null
,则返回""
public static String getPackageName(Class<?> clazz)
对于数组,此方法返回的是数组元素类型的package名。
clazz
- 要查看的类null
,则返回""
public static String getPackageName(String javaClassName)
对于数组,此方法返回的是数组元素类型的package名。
javaClassName
- 要查看的类名null
public static String getResourceNameForObjectClass(Object object)
例如:
ClassUtil.getResourceNameForObjectClass("This is a string") = "java/lang/String.class"
object
- 要显示类名的对象null
public static String getResourceNameForClass(Class<?> clazz)
例如:
ClassUtil.getResourceNameForClass(String.class) = "java/lang/String.class"
clazz
- 要显示类名的类null
public static String getResourceNameForClass(String className)
例如:
ClassUtil.getResourceNameForClass("java.lang.String") = "java/lang/String.class"
className
- 要显示的类名null
public static String getResourceNameForObjectPackage(Object object)
对于数组,此方法返回的是数组元素类型的package名。
object
- 要查看的对象null
,则返回 null
public static String getResourceNameForPackage(Class<?> clazz)
对于数组,此方法返回的是数组元素类型的package名。
clazz
- 要查看的类null
,则返回 null
public static String getResourceNameForPackage(String className)
对于数组,此方法返回的是数组元素类型的package名。
className
- 要查看的类名null
public static Class<?> getArrayClass(Class<?> componentType)
componentType
- 数组的基础类null
,则返回 null
public static Class<?> getArrayClass(Class<?> componentClass, int dimension)
Array
类.componentType
- 数组的基类dimension
- 维数,如果小于 0
则看作 0
null
,则返回
null
public static Class<?> getPrimitiveType(String name)
例如:
ClassUtil.getPrimitiveType("int") = int.class; ClassUtil.getPrimitiveType("long") = long.class;
public static Class<?> getPrimitiveType(Class<?> type)
例如:
ClassUtil.getPrimitiveType(Integer.class) = int.class; ClassUtil.getPrimitiveType(Long.class) = long.class;
public static <T> Class<T> getWrapperTypeIfPrimitive(Class<T> type)
例如:
ClassUtil.getPrimitiveWrapperType(int.class) = Integer.class; ClassUtil.getPrimitiveWrapperType(int[].class) = int[].class; ClassUtil.getPrimitiveWrapperType(int[][].class) = int[][].class; ClassUtil.getPrimitiveWrapperType(String[][].class) = String[][].class;
public static <T> T getPrimitiveDefaultValue(Class<T> type)
null
。
例如:
ClassUtil.getPrimitiveDefaultValue(int.class) = 0; ClassUtil.getPrimitiveDefaultValue(boolean.class) = false; ClassUtil.getPrimitiveDefaultValue(char.class) = '\0';
public static boolean isAssignable(Class<?>[] classes, Class<?>[] fromClasses)
fromClasses
的对象是否可以赋值给另一组类型 classes
。
此方法可以用来确定指定类型的参数 object1, object2, ...
是否可以用来调用确定参数类型为
class1, class2,
...
的方法。
对于 fromClasses
的每个元素 fromClass
和
classes
的每个元素 clazz
, 按照如下规则:
clazz
为 null
,总是返回 false
。fromClass
为 null
,并且目标类型
clazz
为非原子类型,则返回 true
。 因为 null
可以被赋给任何引用类型。Class.isAssignableFrom
方法来确定目标类 clazz
是否和参数类 fromClass
相同或是其父类、接口,如果是,则返回 true
。clazz
为原子类型,那么根据 The Java Language
Specification ,sections 5.1.1, 5.1.2, 5.1.4定义的Widening Primitive
Conversion规则,参数类型 fromClass
可以是任何能扩展成该目标类型的原子类型及其包装类。 例如,
clazz
为 long
,那么参数类型可以是 byte
、
short
、int
、long
、char
及其包装类 java.lang.Byte
、java.lang.Short
、
java.lang.Integer
、 java.lang.Long
和
java.lang.Character
。如果满足这个条件,则返回 true
。false
。classes
- 目标类型列表,如果是 null
总是返回 false
fromClasses
- 参数类型列表, null
表示可赋值给任意非原子类型true
public static boolean isAssignable(Class<?> clazz, Class<?> fromClass)
fromClass
的对象是否可以赋值给另一种类型 clazz
。
此方法可以用来确定指定类型的参数 object1, object2, ...
是否可以用来调用确定参数类型
class1, class2,
...
的方法。
按照如下规则:
clazz
为 null
,总是返回 false
。fromClass
为 null
,并且目标类型
clazz
为非原子类型,则返回 true
。 因为 null
可以被赋给任何引用类型。Class.isAssignableFrom
方法来确定目标类 clazz
是否和参数类 fromClass
相同或是其父类、接口,如果是,则返回 true
。clazz
为原子类型,那么根据 The Java Language
Specification ,sections 5.1.1, 5.1.2, 5.1.4定义的Widening Primitive
Conversion规则,参数类型 fromClass
可以是任何能扩展成该目标类型的原子类型及其包装类。 例如,
clazz
为 long
,那么参数类型可以是 byte
、
short
、int
、long
、char
及其包装类 java.lang.Byte
、java.lang.Short
、
java.lang.Integer
、 java.lang.Long
和
java.lang.Character
。如果满足这个条件,则返回 true
。false
。clazz
- 目标类型,如果是 null
总是返回 false
fromClass
- 参数类型, null
表示可赋值给任意非原子类型null
public static String locateClass(String className, ClassLoader loader)
public static String getShortNameAsProperty(Class<?> clazz)
clazz
- the classIntrospector.decapitalize(String)
public 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 getQualifiedName(Class<?> clazz)
clazz
- the classpublic static String getQualifiedMethodName(Method method)
method
- the methodpublic 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 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 String getClassFileName(Class clazz)
clazz
- the classpublic static boolean isBasicClass(Class<?> clazz)
clazz
- Copyright © 2006–2018 TinyGroup. All rights reserved.