public class ClassUtil extends Object
Constructor and Description |
---|
ClassUtil() |
Modifier and Type | Method and Description |
---|---|
static boolean |
equals(Class<?> clazz,
String className,
boolean ignoreCase)
指定类是否与给定的类名相同
|
static Class<?> |
forName(String name,
boolean isInitialized,
ClassLoader loader)
加载指定名称的类,支持:
替换"/"为"."
|
static <T> Class<T> |
getClass(T obj)
null 安全的获取对象类型 |
static Class<?>[] |
getClasses(Object... objects)
获得对象数组的类数组
|
static String |
getClassName(Class<?> clazz,
boolean isSimple)
获取类名
类名并不包含“.class”这个扩展名 例如:ClassUtil这个类 isSimple为false: "org.dromara.hutool.core.reflect.ClassUtil" isSimple为true: "ClassUtil" |
static String |
getClassName(Object obj,
boolean isSimple)
获取类名
|
static String |
getClassPath()
获得ClassPath,将编码后的中文路径解码为原字符
这个ClassPath路径会文件路径被标准化处理 |
static String |
getClassPath(boolean isEncoded)
获得ClassPath,这个ClassPath路径会文件路径被标准化处理
|
static Set<String> |
getClassPathResources()
获得ClassPath,不解码路径中的特殊字符(例如空格和中文)
|
static Set<String> |
getClassPathResources(boolean isDecode)
获得ClassPath
|
static Set<String> |
getClassPaths(String packageName)
获得ClassPath,不解码路径中的特殊字符(例如空格和中文)
|
static Set<String> |
getClassPaths(String packageName,
boolean isDecode)
获得ClassPath
|
static Object |
getDefaultValue(Class<?> clazz)
获取指定类型分的默认值
默认值规则为: 1、如果为原始类型,返回0 2、非原始类型返回 null
|
static Object[] |
getDefaultValues(Class<?>... classes)
获得默认值列表
|
static Class<?> |
getEnclosingClass(Class<?> clazz)
获得外围类
返回定义此类或匿名类所在的类,如果类本身是在包中定义的,返回 null |
static List<Class<?>> |
getInterfaces(Class<?> cls)
获取指定类及其父类所有的实现接口。
|
static URL |
getLocation(Class<?> clazz)
获取class类路径URL, 不管是否在jar包中都会返回文件夹的路径
class在jar包中返回jar所在文件夹,class不在jar中返回文件夹目录 jdk中的类不能使用此方法 |
static String |
getLocationPath(Class<?> clazz)
获取class类路径, 不管是否在jar包中都会返回文件夹的路径
class在jar包中返回jar所在文件夹,class不在jar中返回文件夹目录 jdk中的类不能使用此方法 |
static String |
getPackage(Class<?> clazz)
获得给定类所在包的名称
例如: org.dromara.hutool.core.reflect.ClassUtil =》 org.dromara.hutool.core.reflect |
static String |
getPackagePath(Class<?> clazz)
获得给定类所在包的路径
例如: org.dromara.hutool.core.reflect.ClassUtil =》 org/dromara/hutool/core/reflect |
static Object |
getPrimitiveDefaultValue(Class<?> clazz)
获取指定原始类型分的默认值
默认值规则为: 1、如果为原始类型,返回0 2、非原始类型返回 null
|
static String |
getShortClassName(String className)
获取完整类名的短格式如:
text.org.dromara.hutool.core.StrUtil -》c.h.c.u.StrUtil |
static List<Class<?>> |
getSuperClasses(Class<?> clazz)
获取指定类的所有父类,结果不包括指定类本身
如果无父类,返回一个空的列表 |
static Class<?> |
getTypeArgument(Class<?> clazz)
获得给定类的第一个泛型参数
|
static Class<?> |
getTypeArgument(Class<?> clazz,
int index)
获得给定类的泛型参数
|
static boolean |
isAllAssignableFrom(Class<?>[] types1,
Class<?>[] types2)
比较判断types1和types2两组类,如果types1中所有的类都与types2对应位置的类相同,或者是其父类或接口,则返回
true |
static boolean |
isAssignable(Class<?> targetType,
Class<?> sourceType)
检查目标类是否可以从原类转化
转化包括: 1、原类是对象,目标类型是原类型实现的接口 2、目标类型是原类型的父类 3、两者是原始类型或者包装类型(相互转换) |
static boolean |
isBasicType(Class<?> clazz)
是否为基本类型(包括包装类和原始类)
|
static boolean |
isClassExists(String className,
ClassLoader loader)
判断指定类名的类是否存在
|
static boolean |
isEnum(Class<?> clazz)
判断类是否为枚举类型
|
static boolean |
isJdkClass(Class<?> clazz)
是否为JDK中定义的类或接口,判断依据:
1、以java.
|
static boolean |
isNormalClass(Class<?> clazz)
是否为标准的类
这个类必须: 1、非接口 2、非抽象类 3、非Enum枚举 4、非数组 5、非注解 6、非原始类型(int, long等) |
static boolean |
isPrimitiveWrapper(Class<?> clazz)
是否为包装类型
|
static boolean |
isSerializable(Class<?> clazz)
给定类是否实现了序列化接口
Serializable |
static boolean |
isSimpleTypeOrArray(Class<?> clazz)
是否为 简单值类型 或 简单值类型的数组
|
static boolean |
isSimpleValueType(Class<?> clazz)
是否为简单值类型
包括: 原始类型 枚举 String、other CharSequence Number Date URI URL Locale Class jdk8时间相关类型 |
static boolean |
isTopLevelClass(Class<?> clazz)
是否为顶层类,即定义在包中的类,而非定义在类中的内部类
|
static Set<Class<?>> |
scanPackage()
扫描该包路径下所有class文件
|
static Set<Class<?>> |
scanPackage(String packageName)
扫描该包路径下所有class文件
|
static Set<Class<?>> |
scanPackage(String packageName,
Predicate<Class<?>> classFilter)
扫描包路径下满足class过滤器条件的所有class文件,
如果包路径为 com.abs + A.class 但是输入 abs会产生classNotFoundException 因为className 应该为 com.abs.A 现在却成为abs.A,此工具类对该异常进行忽略处理,有可能是一个不完善的地方,以后需要进行修改 |
static Set<Class<?>> |
scanPackageByAnnotation(String packageName,
Class<? extends Annotation> annotationClass)
扫描指定包路径下所有包含指定注解的类
|
static Set<Class<?>> |
scanPackageBySuper(String packageName,
Class<?> superClass)
扫描指定包路径下所有指定类或接口的子类或实现类
|
static void |
traverseTypeHierarchy(Class<?> root,
Predicate<Class<?>> filter,
Consumer<Class<?>> consumer,
boolean includeRoot)
按广度优先遍历包括
root 在内,其层级结构中的所有类和接口。 |
static void |
traverseTypeHierarchyWhile(Class<?> root,
Predicate<Class<?>> terminator)
按广度优先遍历包括
root 在内,其层级结构中的所有类和接口,直到terminator 返回false |
static void |
traverseTypeHierarchyWhile(Class<?> root,
Predicate<Class<?>> filter,
Predicate<Class<?>> terminator)
按广度优先遍历包括
root 在内,其层级结构中的所有类和接口,直到terminator 返回false |
public static <T> Class<T> getClass(T obj)
null
安全的获取对象类型T
- 对象类型obj
- 对象,如果为null
返回null
null
返回null
public static Class<?> getEnclosingClass(Class<?> clazz)
null
clazz
- 类public static boolean isTopLevelClass(Class<?> clazz)
clazz
- 类public static String getClassName(Object obj, boolean isSimple)
obj
- 获取类名对象isSimple
- 是否简单类名,如果为true,返回不带包名的类名public static String getClassName(Class<?> clazz, boolean isSimple)
isSimple为false: "org.dromara.hutool.core.reflect.ClassUtil" isSimple为true: "ClassUtil"
clazz
- 类isSimple
- 是否简单类名,如果为true,返回不带包名的类名public static String getShortClassName(String className)
className
- 类名public static Class<?>[] getClasses(Object... objects)
objects
- 对象数组,如果数组中存在null
元素,则此元素被认为是Object类型public static boolean equals(Class<?> clazz, String className, boolean ignoreCase)
clazz
- 类className
- 类名,可以是全类名(包含包名),也可以是简单类名(不包含包名)ignoreCase
- 是否忽略大小写public static Set<Class<?>> scanPackageByAnnotation(String packageName, Class<? extends Annotation> annotationClass)
packageName
- 包路径annotationClass
- 注解类ClassScanner.scanPackageByAnnotation(String, Class)
public static Set<Class<?>> scanPackageBySuper(String packageName, Class<?> superClass)
packageName
- 包路径superClass
- 父类或接口ClassScanner.scanPackageBySuper(String, Class)
public static Set<Class<?>> scanPackage()
ClassScanner.scanPackage()
public static Set<Class<?>> scanPackage(String packageName)
packageName
- 包路径 com | com. | com.abs | com.abs.ClassScanner.scanPackage(String)
public static Set<Class<?>> scanPackage(String packageName, Predicate<Class<?>> classFilter)
packageName
- 包路径 com | com. | com.abs | com.abs.classFilter
- class过滤器,过滤掉不需要的classpublic static Set<String> getClassPathResources()
public static Set<String> getClassPathResources(boolean isDecode)
isDecode
- 是否解码路径中的特殊字符(例如空格和中文)public static Set<String> getClassPaths(String packageName)
packageName
- 包名称public static Set<String> getClassPaths(String packageName, boolean isDecode)
packageName
- 包名称isDecode
- 是否解码路径中的特殊字符(例如空格和中文)public static String getClassPath()
public static String getClassPath(boolean isEncoded)
isEncoded
- 是否编码路径中的中文public static boolean isAllAssignableFrom(Class<?>[] types1, Class<?>[] types2)
true
types1
- 类组1types2
- 类组2public static boolean isPrimitiveWrapper(Class<?> clazz)
clazz
- 类public static boolean isBasicType(Class<?> clazz)
clazz
- 类public static boolean isSimpleTypeOrArray(Class<?> clazz)
clazz
- 属性类isSimpleValueType(Class)
public static boolean isSimpleValueType(Class<?> clazz)
原始类型 枚举 String、other CharSequence Number Date URI URL Locale Class jdk8时间相关类型
clazz
- 类public static boolean isAssignable(Class<?> targetType, Class<?> sourceType)
targetType
- 目标类型sourceType
- 原类型public static boolean isSerializable(Class<?> clazz)
Serializable
clazz
- 类Serializable
public static boolean isNormalClass(Class<?> clazz)
1、非接口 2、非抽象类 3、非Enum枚举 4、非数组 5、非注解 6、非原始类型(int, long等)
clazz
- 类public static boolean isEnum(Class<?> clazz)
clazz
- 类public static Class<?> getTypeArgument(Class<?> clazz)
clazz
- 被检查的类,必须是已经确定泛型类型的类Class
public static Class<?> getTypeArgument(Class<?> clazz, int index)
clazz
- 被检查的类,必须是已经确定泛型类型的类index
- 泛型类型的索引号,即第几个泛型类型Class
public static String getPackage(Class<?> clazz)
clazz
- 类public static String getPackagePath(Class<?> clazz)
clazz
- 类public static Object getDefaultValue(Class<?> clazz)
1、如果为原始类型,返回0
2、非原始类型返回 null
clazz
- 类public static Object getPrimitiveDefaultValue(Class<?> clazz)
1、如果为原始类型,返回0
2、非原始类型返回 null
clazz
- 类public static Object[] getDefaultValues(Class<?>... classes)
classes
- 值类型public static boolean isJdkClass(Class<?> clazz)
1、以java.、javax.开头的包名 2、ClassLoader为null
clazz
- 被检查的类public static URL getLocation(Class<?> clazz)
clazz
- 类public static String getLocationPath(Class<?> clazz)
clazz
- 类public static boolean isClassExists(String className, ClassLoader loader)
className
- 全类名loader
- ClassLoader
public static Class<?> forName(String name, boolean isInitialized, ClassLoader loader)
name
- 类名isInitialized
- 是否初始化loader
- ClassLoader
,null
表示默认null
Class.forName(String, boolean, ClassLoader)
public static List<Class<?>> getSuperClasses(Class<?> clazz)
clazz
- 类, 可以为null
public static List<Class<?>> getInterfaces(Class<?> cls)
cls
- 被查找的类null
,则返回空列表public static void traverseTypeHierarchyWhile(Class<?> root, Predicate<Class<?>> terminator)
root
在内,其层级结构中的所有类和接口,直到terminator
返回false
root
- 根类terminator
- 对遍历到的每个类与接口执行的校验,若为false
则立刻中断遍历public static void traverseTypeHierarchyWhile(Class<?> root, Predicate<Class<?>> filter, Predicate<Class<?>> terminator)
root
在内,其层级结构中的所有类和接口,直到terminator
返回false
root
- 根类filter
- 过滤器,被过滤的类及其层级结构中的类与接口将被忽略terminator
- 对遍历到的每个类与接口执行的校验,若为false
则立刻中断遍历public static void traverseTypeHierarchy(Class<?> root, Predicate<Class<?>> filter, Consumer<Class<?>> consumer, boolean includeRoot)
按广度优先遍历包括root
在内,其层级结构中的所有类和接口。
类遍历顺序如下:
type
距离越近,则顺序越靠前;type
距离相同,则父类优先于接口;type
距离相同的接口,则顺序遵循接口在Class.getInterfaces()
的顺序;root
- 根类filter
- 过滤器,被过滤的类及其层级结构中的类与接口将被忽略consumer
- 对遍历到的每个类与接口执行的操作,每个类和接口都只会被访问一次includeRoot
- 是否包括根类Copyright © 2025. All rights reserved.