| 限定符和类型 | 类和说明 |
|---|---|
protected static class |
ClassKit.TypeInfo
代表一个类的信息, 包括父类, 接口, 数组的维数等.
|
| 限定符和类型 | 字段和说明 |
|---|---|
static String |
INNER_CLASS_SEPARATOR
内联类的分隔符: "$"。
|
static char |
INNER_CLASS_SEPARATOR_CHAR
内联类的分隔符: '$'。
|
| 构造器和说明 |
|---|
ClassKit() |
| 限定符和类型 | 方法和说明 |
|---|---|
static <T> boolean |
canInstatnce(Class<T> clazz)
判断一个类是否可以实例化,如果clazz为null,则返回false
按一下顺序判断:
如果clazz为primitive类型,我们认为除了 void.class外,其他都可实例化,因为可以直接赋值
如果clazz为Array类型,如果数组元素的类型为public ,那么显然也可以实例化,因为可以直接定义新对象,返还
true
接下来看clazz是否为abstract或 interface ,如果是,则显然不可实例化,返还false
最后遍历clazz的构造器,查看是否存在public类型接口,如果存在则返还 true,否则返还false
|
static List<Class<?>> |
getAllInterfaces(Class<?> clazz) |
static Class<?>[] |
getAllInterfacesAsArray(Class<?> clazz) |
static Set<Class<?>> |
getAllInterfacesAsSet(Class<?> clazz,
ClassLoader classLoader) |
static List<Class<?>> |
getAllSuperclasses(Class<?> clazz)
获取除Object.class以为的所有父类
|
static Class<?>[] |
getAllSuperclassesAsArray(Class<?> clazz) |
static Class<?> |
getArrayClass(Class<?> componentType)
取得指定一维数组类.
|
static Class<?> |
getArrayClass(Class<?> componentClass,
int dimension)
取得指定维数的 Array类.
|
static Class<?> |
getArrayComponentType(Class<?> type)
取得数组元素的类型。
|
static String |
getClassNameAsResource(String className)
取得指定类的资源名。
|
static String |
getFriendlyClassName(Class<?> clazz)
取得友好的类名。
|
static String |
getFriendlyClassName(String javaClassName)
取得友好的类名。
|
static String |
getFriendlyClassNameForObject(Object object)
取得对象所属的类的友好类名。
|
static <T> T |
getPrimitiveDefaultValue(Class<T> type)
取得primitive类型的默认值。
|
static Class<?> |
getPrimitiveType(Class<?> type)
取得primitive类。
|
static Class<?> |
getPrimitiveType(String name)
取得primitive类。
|
static String |
getShortClassName(Class<?> clazz)
取得短类名,不包括package名。
|
static String |
getShortClassName(String className)
取得类名,不包括package名。
|
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描述。
|
protected static ClassKit.TypeInfo |
getTypeInfo(Class<?> type)
取得指定类的 TypeInfo。
|
static <T> Class<T> |
getWrapperTypeIfPrimitive(Class<T> type)
取得primitive类型的wrapper。
|
static boolean |
isAssignable(Class<?>[] classes,
Class<?>[] fromClasses)
检查一组指定类型 fromClasses 的对象是否可以赋值给另一组类型 classes。
|
static boolean |
isAssignable(Class<?> clazz,
Class<?> fromClass)
检查指定类型 fromClass 的对象是否可以赋值给另一种类型 clazz。
|
static boolean |
isCacheSafe(Class<?> clazz,
ClassLoader classLoader) |
static boolean |
isInstance(Class<?> clazz,
Object object)
如果对象object是类clazz的实例, 则返回true,否则返回 false
此方法考虑包装类和基本类型的转换
ClassUtil.isInstance(int.class, Integer.valueOf(0)) = true;
ClassUtil.isInstance(Integer.class, (int) 0) = true;
ClassUtil.isInstance(int.class, (int) 0) = true;
ClassUtil.isInstance(Integer.class, Integer.valueOf(0)) = true;
ClassUtil.isInstance(int[].class, new Integer[] { 0 }) = false;
ClassUtil.isInstance(Integer[].class, new int[] { 0 }) = false;
ClassUtil.isInstance(int[].class, new new int[] { 0 }) = false;
ClassUtil.isInstance(Integer[].class, new Integer[] { 0 }) = false;
|
static boolean |
isInterfaceImpl(Class<?> thisClass,
Class<?> targetInterface) |
static boolean |
isPrimitiveOrWrapper(Class<?> clazz)
判断是否为原子类型或者其包装类,如果clazz为null,则返还 false
|
static boolean |
isSubClass(Class<?> thisClass,
Class<?> target) |
static boolean |
isVisible(Class<?> clazz,
ClassLoader 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 char INNER_CLASS_SEPARATOR_CHAR
public static final String INNER_CLASS_SEPARATOR
public static String getClassNameAsResource(String className)
例如:
ClassUtil.getClassNameAsResource("java.lang.String") = "java/lang/String.class"
className - 要显示的类名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)
如果clazz为null,则返还 null
例如:
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)
如果clazz为null,则返还 null
例如:
ClassUtil.getPrimitiveDefaultValue(int.class) = 0; ClassUtil.getPrimitiveDefaultValue(boolean.class) = false; ClassUtil.getPrimitiveDefaultValue(char.class) = '\0';
public static boolean isPrimitiveOrWrapper(Class<?> clazz)
public static Class<?> getArrayClass(Class<?> componentType)
componentType - 数组的基础类public static Class<?> getArrayClass(Class<?> componentClass, int dimension)
componentType - 数组的基类dimension - 维数,如果小于 0 则看作 0public static Class<?> getArrayComponentType(Class<?> type)
type - 要查找的类public static boolean isInstance(Class<?> clazz, Object object)
此方法考虑包装类和基本类型的转换
ClassUtil.isInstance(int.class, Integer.valueOf(0)) = true;
ClassUtil.isInstance(Integer.class, (int) 0) = true;
ClassUtil.isInstance(int.class, (int) 0) = true;
ClassUtil.isInstance(Integer.class, Integer.valueOf(0)) = true;
ClassUtil.isInstance(int[].class, new Integer[] { 0 }) = false;
ClassUtil.isInstance(Integer[].class, new int[] { 0 }) = false;
ClassUtil.isInstance(int[].class, new new int[] { 0 }) = false;
ClassUtil.isInstance(Integer[].class, new Integer[] { 0 }) = false;
clazz - 校验的类object - 校验的对象public static <T> boolean canInstatnce(Class<T> clazz)
按一下顺序判断:
clazz - 校验的类protected static ClassKit.TypeInfo getTypeInfo(Class<?> type)
type - 指定类或接口public static List<Class<?>> getAllSuperclasses(Class<?> clazz)
public static Set<Class<?>> getAllInterfacesAsSet(Class<?> clazz, ClassLoader classLoader)
public static boolean isVisible(Class<?> clazz, ClassLoader classLoader)
public static boolean isCacheSafe(Class<?> clazz, ClassLoader classLoader)
public static boolean isAssignable(Class<?>[] classes, Class<?>[] fromClasses)
此方法可以用来确定指定类型的参数 object1, object2, ... 是否可以用来调用确定参数类型为 class1, class2, ... 的方法。
对于 fromClasses 的每个元素 fromClass 和 classes 的每个元素 clazz, 按照如下规则:
classes - 目标类型列表,如果是 null 总是返回 falsefromClasses - 参数类型列表, null 表示可赋值给任意非原子类型public static boolean isAssignable(Class<?> clazz, Class<?> fromClass)
此方法可以用来确定指定类型的参数 object1, object2, ... 是否可以用来调用确定参数类型 class1, class2, ... 的方法。
按照如下规则:
clazz - 目标类型,如果是 null 总是返回 falsefromClass - 参数类型, null 表示可赋值给任意非原子类型public static String locateClass(String className, ClassLoader loader)
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 - 要显示类名的对象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 - 要显示类名的对象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 - 要转换的类名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 - 要查看的对象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 - 要查看的对象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 - 要查看的类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 - 要查看的类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 - 要查看的类名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 - 要查看的类名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 getShortClassName(String className)
此方法可以正确显示数组和内联类的名称。
例如:
ClassUtil.getShortClassName(Boolean.class.getName()) = "Boolean" ClassUtil.getShortClassName(Boolean[].class.getName()) = "Boolean[]" ClassUtil.getShortClassName(int[][].class.getName()) = "int[][]" ClassUtil.getShortClassName(Map.Entry.class.getName()) = "Map.Entry"
className - 要查看的类名public static String getShortClassName(Class<?> clazz)
ClassUtil.getShortClassName(Boolean.class) = "Boolean" ClassUtil.getShortClassName(Boolean[].class) = "Boolean[]" ClassUtil.getShortClassName(int[][].class) = "int[][]" ClassUtil.getShortClassName(Map.Entry.class) = "Map.Entry"
clazz - 要查看的类Copyright © 2015. All rights reserved.