类 ClassUtil
- java.lang.Object
-
- cc.shacocloud.mirage.utils.ClassUtil
-
public class ClassUtil extends Object
类工具类- 作者:
- 思追(shaco)
-
-
字段概要
字段 修饰符和类型 字段 说明 static StringARRAY_SUFFIX数组类名的后缀:“[]”
-
构造器概要
构造器 构造器 说明 ClassUtil()
-
方法概要
所有方法 静态方法 具体方法 修饰符和类型 方法 说明 static @NotNull StringclassPackageAsResourcePath(@Nullable Class<?> clazz)将类名转为资源路径地址,该资源路地址由类的包名作为路径名组成,即所有点 ('.')static <T> @Nullable Constructor<T>findPrimaryConstructor(@NotNull Class<T> clazz)返回所提供类的主构造函数static Class<?>forName(@NotNull String name, @Nullable ClassLoader classLoader)替换Class.forName(),它还返回原语(例如“int”)和数组类名(例如“String[]”)的类实例。static @NotNull Set<Class<?>>getAllInterfacesForClassAsSet(@NotNull Class<?> clazz)获取类型实现的所有接口static Class<?> @NotNull []getClasses(Object @NotNull ... objects)获得对象数组的类数组static @Nullable ClassLoadergetDefaultClassLoader()返回要使用的默认类加载器:通常是线程上下文类加载器(如果可用)static @Nullable StringgetDescriptiveType(@Nullable Object value)返回给定对象类型的描述性名称:通常只是类名,但组件类型类名 + “[]”用于数组,以及 JDK 代理的已实现接口的附加列表static @NotNull StringgetPackageName(@NotNull Class<?> clazz)确定给定类的包的名称,例如java.lang.String类的“java.lang”static @NotNull StringgetPackageName(@NotNull String fqClassName)确定给定的完全限定类名的包名称,例如java.lang.String类名的“java.lang”static @NotNull StringgetShortName(@NotNull Class<?> clazz)获取不带限定包名称的类名static @NotNull StringgetShortName(@NotNull String className)获取不带限定包名称的类名static booleanhasPublicField(Class<?> clazz)指定类中是否有public类型字段(static字段除外)static booleanhasSetter(Class<?> clazz)判断是否有Setter方法static <T> TinstantiateClass(@NotNull Class<T> clazz)使用其主要造函数(对于 Kotlin 类,可能声明默认参数)或其默认构造函数(对于常规 Java 类,需要标准的无参数设置)实例化类。static <T> TinstantiateClass(@NotNull Constructor<T> ctor, Object... args)使用给定构造函数实例化类的便捷方法static booleanisAbstract(@NotNull Class<?> clazz)检查类是否为抽象类static booleanisAllAssignableFrom(Class<?>[] types1, Class<?>[] types2)比较判断types1和types2两组类,如果types1中所有的类都与types2对应位置的类相同,或者是其父类或接口,则返回truestatic booleanisAssignable(Class<?> targetType, Class<?> sourceType)检查目标类是否可以从原类转化
转化包括:
1、原类是对象,目标类型是原类型实现的接口
2、目标类型是原类型的父类
3、两者是原始类型或者包装类型(相互转换)static booleanisBasicType(Class<?> clazz)是否为基本类型(包括包装类和原始类)static booleanisBean(Class<?> clazz)判断是否为Bean对象,判定方法是:static booleanisInnerClass(@NotNull Class<?> clazz)确定提供的类是否是一个 内部类,即一个包围类的非静态成员。static booleanisNormalClass(@NotNull Class<?> clazz)检查类是否为普通类static booleanisPresent(String className, @Nullable ClassLoader classLoader)确定由提供的名称标识的Class是否存在并且可以加载。static booleanisPrimitiveWrapper(Class<?> clazz)是否为包装类型static booleanisSetMethod(@NotNull Method method)判断当前方法是否是 set 方法static booleanisSimpleValueType(Class<?> type)检查给定类型是否表示简单值类型static Class<?>resolvePrimitiveIfNecessary(@NotNull Class<?> clazz)如果类型为原始类型则返回对应包装类型,反之返回类型本身
-
-
-
方法详细资料
-
getPackageName
@NotNull public static @NotNull String getPackageName(@NotNull @NotNull Class<?> clazz)
确定给定类的包的名称,例如java.lang.String类的“java.lang”
-
getPackageName
@NotNull public static @NotNull String getPackageName(@NotNull @NotNull String fqClassName)
确定给定的完全限定类名的包名称,例如java.lang.String类名的“java.lang”
-
forName
public static Class<?> forName(@NotNull @NotNull String name, @Nullable @Nullable ClassLoader classLoader) throws ClassNotFoundException, LinkageError
替换Class.forName(),它还返回原语(例如“int”)和数组类名(例如“String[]”)的类实例。 此外,它还能够以Java源代码样式解析嵌套类名(例如“java.lang.Thread.State”而不是“java.lang.Thread$State”)。- 参数:
name- 类的名称classLoader- 要使用的类装入器(可以是null,表示缺省类装入器)- 返回:
- 所提供名称的类实例
- 抛出:
ClassNotFoundException- 如果未找到该类LinkageError- 如果无法加载类文件- 另请参阅:
Class.forName(String, boolean, ClassLoader)
-
isPresent
public static boolean isPresent(String className, @Nullable @Nullable ClassLoader classLoader)
确定由提供的名称标识的Class是否存在并且可以加载。如果类或其依赖项之一不存在或无法加载,将返回false。- 参数:
className- 要检查的类的名称classLoader- 要使用的类装入器(可以是null,表示缺省类装入器)- 返回:
- 指定的类是否存在(包括其所有超类和接口)
- 抛出:
IllegalStateException- 如果相应的类是可解析的,但类的继承层次结构中存在可读性不匹配(通常是模块定义中缺少依赖项声明,用于此处检查的类实现的超类或接口)
-
getDefaultClassLoader
@Nullable public static @Nullable ClassLoader getDefaultClassLoader()
返回要使用的默认类加载器:通常是线程上下文类加载器(如果可用)- 返回:
- 默认的类加载器(如果甚至无法访问系统类加载器,则只有
null) - 另请参阅:
Thread.getContextClassLoader(),ClassLoader.getSystemClassLoader()
-
isInnerClass
public static boolean isInnerClass(@NotNull @NotNull Class<?> clazz)确定提供的类是否是一个 内部类,即一个包围类的非静态成员。- 返回:
- 如果提供的类是一个内层类的话返回
true - 另请参阅:
Class.isMemberClass()
-
isAssignable
public static boolean isAssignable(Class<?> targetType, Class<?> sourceType)
检查目标类是否可以从原类转化
转化包括:
1、原类是对象,目标类型是原类型实现的接口
2、目标类型是原类型的父类
3、两者是原始类型或者包装类型(相互转换)- 参数:
targetType- 目标类型sourceType- 原类型- 返回:
- 是否可转化
-
isBasicType
public static boolean isBasicType(Class<?> clazz)
是否为基本类型(包括包装类和原始类)- 参数:
clazz- 类- 返回:
- 是否为基本类型
-
isPrimitiveWrapper
public static boolean isPrimitiveWrapper(Class<?> clazz)
是否为包装类型- 参数:
clazz- 类- 返回:
- 是否为包装类型
-
resolvePrimitiveIfNecessary
public static Class<?> resolvePrimitiveIfNecessary(@NotNull @NotNull Class<?> clazz)
如果类型为原始类型则返回对应包装类型,反之返回类型本身
-
isAllAssignableFrom
public static boolean isAllAssignableFrom(Class<?>[] types1, Class<?>[] types2)
比较判断types1和types2两组类,如果types1中所有的类都与types2对应位置的类相同,或者是其父类或接口,则返回true- 参数:
types1- 类组1types2- 类组2- 返回:
- 是否相同、父类或接口
-
getClasses
@Contract(pure=true) public static Class<?> @NotNull [] getClasses(Object @NotNull ... objects)
获得对象数组的类数组- 参数:
objects- 对象数组,如果数组中存在null元素,则此元素被认为是Object类型- 返回:
- 类数组
-
getAllInterfacesForClassAsSet
@NotNull public static @NotNull Set<Class<?>> getAllInterfacesForClassAsSet(@NotNull @NotNull Class<?> clazz)
获取类型实现的所有接口
-
instantiateClass
public static <T> T instantiateClass(@NotNull @NotNull Class<T> clazz) throws IllegalArgumentException使用其主要造函数(对于 Kotlin 类,可能声明默认参数)或其默认构造函数(对于常规 Java 类,需要标准的无参数设置)实例化类。请注意,如果给定不可访问(即非公共)构造函数,则此方法尝试设置可访问的构造函数。
- 参数:
clazz- 要实例化的类- 返回:
- 实例
- 抛出:
IllegalArgumentException- 另请参阅:
Constructor.newInstance(java.lang.Object...)
-
findPrimaryConstructor
@Nullable public static <T> @Nullable Constructor<T> findPrimaryConstructor(@NotNull @NotNull Class<T> clazz)
返回所提供类的主构造函数对于 Kotlin 类,这将返回与 Kotlin 主构造函数(如 Kotlin 规范中所定义)相对应的 Java 构造函数。 否则,特别是对于非 Kotlin 类,这只返回
null。- 参数:
clazz- 要检查的类- 另请参阅:
- 文档
-
instantiateClass
public static <T> T instantiateClass(@NotNull @NotNull Constructor<T> ctor, Object... args)使用给定构造函数实例化类的便捷方法请注意,如果给定不可访问(即非公共)构造函数,则此方法尝试设置可访问的构造函数,并支持具有可选参数和默认值的 Kotlin 类
- 参数:
ctor- 要实例化的构造函数args- 要应用的构造函数参数(对未指定的参数使用null,支持 Kotlin 可选参数和 Java 基元类型)- 返回:
- 新的实例
- 另请参阅:
Constructor.newInstance(java.lang.Object...)
-
getDescriptiveType
@Nullable public static @Nullable String getDescriptiveType(@Nullable @Nullable Object value)
返回给定对象类型的描述性名称:通常只是类名,但组件类型类名 + “[]”用于数组,以及 JDK 代理的已实现接口的附加列表- 返回:
- 类的限定名
-
isSimpleValueType
public static boolean isSimpleValueType(Class<?> type)
检查给定类型是否表示简单值类型Void和void不被视为简单值类型- 参数:
type- 要检查的类型
-
isNormalClass
public static boolean isNormalClass(@NotNull @NotNull Class<?> clazz)检查类是否为普通类普通类不是枚举,注解,接口,抽象类,匿名类,内部类,编译器生成的类
-
isAbstract
public static boolean isAbstract(@NotNull @NotNull Class<?> clazz)检查类是否为抽象类
-
getShortName
@NotNull public static @NotNull String getShortName(@NotNull @NotNull Class<?> clazz)
获取不带限定包名称的类名
-
getShortName
@NotNull public static @NotNull String getShortName(@NotNull @NotNull String className)
获取不带限定包名称的类名
-
classPackageAsResourcePath
@NotNull public static @NotNull String classPackageAsResourcePath(@Nullable @Nullable Class<?> clazz)
将类名转为资源路径地址,该资源路地址由类的包名作为路径名组成,即所有点 ('.') 都替换为斜杠 ('/')- 参数:
clazz-Class如果为空则返回空字符- 返回:
- 表示包名称的路径
- 另请参阅:
ClassLoader.getResource(java.lang.String),Class.getResource(java.lang.String)
-
hasSetter
public static boolean hasSetter(Class<?> clazz)
判断是否有Setter方法- 参数:
clazz- 待测试类- 返回:
- true 则包含 反之不包含
- 另请参阅:
isSetMethod(java.lang.reflect.Method)
-
isSetMethod
public static boolean isSetMethod(@NotNull @NotNull Method method)判断当前方法是否是 set 方法set 方法必须满足以下几个条件
- 方法名称必须以 set 为前缀,且 set 的下一个字符大写
- 方法必须只有一个入参
-
hasPublicField
public static boolean hasPublicField(Class<?> clazz)
指定类中是否有public类型字段(static字段除外)- 参数:
clazz- 待测试类- 返回:
- 是否有public类型字段
-
isBean
public static boolean isBean(Class<?> clazz)
判断是否为Bean对象,判定方法是:1、是否存在只有一个参数的setXXX方法 2、是否存在public类型的字段- 参数:
clazz- 待测试类- 返回:
- 是否为Bean对象
- 另请参阅:
hasSetter(Class),hasPublicField(Class)
-
-