类 ClassUtil


  • public class ClassUtil
    extends Object
    类工具类
    作者:
    思追(shaco)
    • 字段概要

      字段 
      修饰符和类型 字段 说明
      static String ARRAY_SUFFIX
      数组类名的后缀:“[]”
    • 构造器概要

      构造器 
      构造器 说明
      ClassUtil()  
    • 方法概要

      所有方法 静态方法 具体方法 
      修饰符和类型 方法 说明
      static @NotNull String classPackageAsResourcePath​(@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 ClassLoader getDefaultClassLoader()
      返回要使用的默认类加载器:通常是线程上下文类加载器(如果可用)
      static @Nullable String getDescriptiveType​(@Nullable Object value)
      返回给定对象类型的描述性名称:通常只是类名,但组件类型类名 + “[]”用于数组,以及 JDK 代理的已实现接口的附加列表
      static @NotNull String getPackageName​(@NotNull Class<?> clazz)
      确定给定类的包的名称,例如 java.lang.String 类的“java.lang”
      static @NotNull String getPackageName​(@NotNull String fqClassName)
      确定给定的完全限定类名的包名称,例如 java.lang.String 类名的“java.lang”
      static @NotNull String getShortName​(@NotNull Class<?> clazz)
      获取不带限定包名称的类名
      static @NotNull String getShortName​(@NotNull String className)
      获取不带限定包名称的类名
      static boolean hasPublicField​(Class<?> clazz)
      指定类中是否有public类型字段(static字段除外)
      static boolean hasSetter​(Class<?> clazz)
      判断是否有Setter方法
      static <T> T instantiateClass​(@NotNull Class<T> clazz)
      使用其主要造函数(对于 Kotlin 类,可能声明默认参数)或其默认构造函数(对于常规 Java 类,需要标准的无参数设置)实例化类。
      static <T> T instantiateClass​(@NotNull Constructor<T> ctor, Object... args)
      使用给定构造函数实例化类的便捷方法
      static boolean isAbstract​(@NotNull Class<?> clazz)
      检查类是否为抽象类
      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 isBean​(Class<?> clazz)
      判断是否为Bean对象,判定方法是:
      static boolean isInnerClass​(@NotNull Class<?> clazz)
      确定提供的类是否是一个 内部类,即一个包围类的非静态成员。
      static boolean isNormalClass​(@NotNull Class<?> clazz)
      检查类是否为普通类
      static boolean isPresent​(String className, @Nullable ClassLoader classLoader)
      确定由提供的名称标识的 Class 是否存在并且可以加载。
      static boolean isPrimitiveWrapper​(Class<?> clazz)
      是否为包装类型
      static boolean isSetMethod​(@NotNull Method method)
      判断当前方法是否是 set 方法
      static boolean isSimpleValueType​(Class<?> type)
      检查给定类型是否表示简单值类型
      static Class<?> resolvePrimitiveIfNecessary​(@NotNull Class<?> clazz)
      如果类型为原始类型则返回对应包装类型,反之返回类型本身
    • 字段详细资料

      • ARRAY_SUFFIX

        public static final String ARRAY_SUFFIX
        数组类名的后缀:“[]”
        另请参阅:
        常量字段值
    • 构造器详细资料

      • ClassUtil

        public ClassUtil()
    • 方法详细资料

      • 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 - 如果相应的类是可解析的,但类的继承层次结构中存在可读性不匹配(通常是模块定义中缺少依赖项声明,用于此处检查的类实现的超类或接口)
      • 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 - 类组1
        types2 - 类组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)
        检查给定类型是否表示简单值类型

        Voidvoid 不被视为简单值类型

        参数:
        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)