Class ClassKit

java.lang.Object
org.aoju.bus.core.toolkit.ClassKit

public class ClassKit extends Object
Class工具类
Since:
Java 17+
Author:
Kimi Liu
  • Field Details

    • SYSTEM_COMPILER

      public static final JavaCompiler SYSTEM_COMPILER
      java 编译器
  • Constructor Details

    • ClassKit

      public ClassKit()
  • Method Details

    • getClass

      public static <T> Class<T> getClass(T obj)
      null安全的获取对象类型
      Type Parameters:
      T - 对象类型
      Parameters:
      obj - 对象,如果为null 返回null
      Returns:
      对象类型, 提供对象如果为null 返回null
    • getClassName

      public static String getClassName(Object obj, boolean isSimple)
      获取类名
      Parameters:
      obj - 获取类名对象
      isSimple - 是否简单类名,如果为true,返回不带包名的类名
      Returns:
      类名
    • getClassName

      public static String getClassName(Class<?> clazz, boolean isSimple)
      获取类名 类名并不包含“.class”这个扩展名 例如:ClassUtil这个类
       isSimple为false: "org.aoju.core.toolkit.ClassKit"
       isSimple为true: "ClassKit"
       
      Parameters:
      clazz - 类
      isSimple - 是否简单类名,如果为true,返回不带包名的类名
      Returns:
      类名
    • getClasses

      public static Class<?>[] getClasses(Object... objects)
      获得对象数组的类数组
      Parameters:
      objects - 对象数组,如果数组中存在null元素,则此元素被认为是Object类型
      Returns:
      类数组
    • equals

      public static boolean equals(Class<?> clazz, String className, boolean ignoreCase)
      指定类是否与给定的类名相同
      Parameters:
      clazz - 类
      className - 类名,可以是全类名(包含包名),也可以是简单类名(不包含包名)
      ignoreCase - 是否忽略大小写
      Returns:
      指定类是否与给定的类名相同
    • getPublicMethodNames

      public static Set<String> getPublicMethodNames(Class<?> clazz)
      获得指定类中的Public方法名 去重重载的方法
      Parameters:
      clazz - 类
      Returns:
      方法名Set
    • getPublicMethods

      public static Method[] getPublicMethods(Class<?> clazz)
      获得本类及其父类所有Public方法
      Parameters:
      clazz - 查找方法的类
      Returns:
      过滤后的方法列表
    • getPublicMethods

      public static List<Method> getPublicMethods(Class<?> clazz, Filter<Method> filter)
      获得指定类过滤后的Public方法列表
      Parameters:
      clazz - 查找方法的类
      filter - 过滤器
      Returns:
      过滤后的方法列表
    • getPublicMethods

      public static List<Method> getPublicMethods(Class<?> clazz, Method... excludeMethods)
      获得指定类过滤后的Public方法列表
      Parameters:
      clazz - 查找方法的类
      excludeMethods - 不包括的方法
      Returns:
      过滤后的方法列表
    • getPublicMethods

      public static List<Method> getPublicMethods(Class<?> clazz, String... excludeMethodNames)
      获得指定类过滤后的Public方法列表
      Parameters:
      clazz - 查找方法的类
      excludeMethodNames - 不包括的方法名列表
      Returns:
      过滤后的方法列表
    • getPublicMethod

      public static Method getPublicMethod(Class<?> clazz, String methodName, Class<?>... paramTypes) throws SecurityException
      查找指定Public方法 如果找不到对应的方法或方法不为public的则返回null
      Parameters:
      clazz - 类
      methodName - 方法名
      paramTypes - 参数类型
      Returns:
      方法
      Throws:
      SecurityException - 无权访问抛出异常
    • getDeclaredMethodNames

      public static Set<String> getDeclaredMethodNames(Class<?> clazz)
      获得指定类中的Public方法名 去重重载的方法
      Parameters:
      clazz - 类
      Returns:
      方法名Set
    • getDeclaredMethods

      public static Method[] getDeclaredMethods(Class<?> clazz)
      获得声明的所有方法,包括本类及其父类和接口的所有方法和Object类的方法
      Parameters:
      clazz - 类
      Returns:
      方法数组
    • getDeclaredMethodOfObj

      public static Method getDeclaredMethodOfObj(Object obj, String methodName, Object... args) throws SecurityException
      查找指定对象中的所有方法(包括非public方法),也包括父对象和Object类的方法
      Parameters:
      obj - 被查找的对象
      methodName - 方法名
      args - 参数
      Returns:
      方法
      Throws:
      SecurityException - 无访问权限抛出异常
    • getDeclaredMethod

      public static Method getDeclaredMethod(Class<?> clazz, String methodName, Class<?>... parameterTypes) throws SecurityException
      查找指定类中的所有方法(包括非public方法),也包括父类和Object类的方法 找不到方法会返回null
      Parameters:
      clazz - 被查找的类
      methodName - 方法名
      parameterTypes - 参数类型
      Returns:
      方法
      Throws:
      SecurityException - 无访问权限抛出异常
    • getDeclaredFields

      public static Field[] getDeclaredFields(Class<?> clazz) throws SecurityException
      查找指定类中的所有字段(包括非public字段)
      Parameters:
      clazz - 被查找字段的类
      Returns:
      字段
      Throws:
      SecurityException - 安全异常
    • getJavaClassPaths

      public static String[] getJavaClassPaths()
      Returns:
      获得Java ClassPath路径,不包括 jre
    • isAllAssignableFrom

      public static boolean isAllAssignableFrom(Class<?>[] types1, Class<?>[] types2)
      比较判断types1和types2两组类,如果types1中所有的类都与types2对应位置的类相同,或者是其父类或接口,则返回true
      Parameters:
      types1 - 类组1
      types2 - 类组2
      Returns:
      是否相同、父类或接口
    • invoke

      public static <T> T invoke(String classNameWithMethodName, Object[] args)
      执行方法 可执行Private方法,也可执行static方法 执行非static方法时,必须满足对象有默认构造方法 非单例模式,如果是非静态方法,每次创建一个新对象
      Type Parameters:
      T - 对象类型
      Parameters:
      classNameWithMethodName - 类名和方法名表达式,类名与方法名用.#连接
      args - 参数,必须严格对应指定方法的参数类型和数量
      Returns:
      返回结果
    • invoke

      public static <T> T invoke(String classNameWithMethodName, boolean isSingleton, Object... args)
      执行方法 可执行Private方法,也可执行static方法 执行非static方法时,必须满足对象有默认构造方法
      Type Parameters:
      T - 对象类型
      Parameters:
      classNameWithMethodName - 类名和方法名表达式
      isSingleton - 是否为单例对象,如果此参数为false,每次执行方法时创建一个新对象
      args - 参数,必须严格对应指定方法的参数类型和数量
      Returns:
      返回结果
    • invoke

      public static <T> T invoke(String className, String methodName, Object[] args)
      执行方法 可执行Private方法,也可执行static方法 执行非static方法时,必须满足对象有默认构造方法 非单例模式,如果是非静态方法,每次创建一个新对象
      Type Parameters:
      T - 对象类型
      Parameters:
      className - 类名,完整类路径
      methodName - 方法名
      args - 参数,必须严格对应指定方法的参数类型和数量
      Returns:
      返回结果
    • invoke

      public static <T> T invoke(String className, String methodName, boolean isSingleton, Object... args)
      执行方法 可执行Private方法,也可执行static方法 执行非static方法时,必须满足对象有默认构造方法
      Type Parameters:
      T - 对象类型
      Parameters:
      className - 类名,完整类路径
      methodName - 方法名
      isSingleton - 是否为单例对象,如果此参数为false,每次执行方法时创建一个新对象
      args - 参数,必须严格对应指定方法的参数类型和数量
      Returns:
      返回结果
    • isPrimitiveWrapper

      public static boolean isPrimitiveWrapper(Class<?> clazz)
      是否为包装类型
      Parameters:
      clazz - 类
      Returns:
      是否为包装类型
    • isBasicType

      public static boolean isBasicType(Class<?> clazz)
      是否为基本类型(包括包装类和原始类)
      Parameters:
      clazz - 类
      Returns:
      是否为基本类型
    • isSimpleTypeOrArray

      public static boolean isSimpleTypeOrArray(Class<?> clazz)
      是否简单值类型或简单值类型的数组 包括:原始类型,、String、other CharSequence, a Number, a Date, a URI, a URL, a Locale or a Class及其数组
      Parameters:
      clazz - 属性类
      Returns:
      是否简单值类型或简单值类型的数组
    • isSimpleValueType

      public static boolean isSimpleValueType(Class<?> clazz)
      是否为简单值类型 包括:
           原始类型
           String
           CharSequence
           Number
           Date
           URI
           URL
           Locale
           Class
       
      Parameters:
      clazz - 类
      clazz - 类
      Returns:
      是否为简单值类型
    • isAssignable

      public static boolean isAssignable(Class<?>[] classArray, Class<?>... toClassArray)
      检查目标类是否可以从原类转化 转化包括: 1、原类是对象,目标类型是原类型实现的接口 2、目标类型是原类型的父类 3、两者是原始类型或者包装类型(相互转换)
      Parameters:
      classArray - 目标类型
      toClassArray - 原类型
      Returns:
      是否可转化
    • isAssignable

      public static boolean isAssignable(Class<?> classArray, Class<?> toClassArray)
      检查目标类是否可以从原类转化 转化包括: 1、原类是对象,目标类型是原类型实现的接口 2、目标类型是原类型的父类 3、两者是原始类型或者包装类型(相互转换)
      Parameters:
      classArray - 目标类型
      toClassArray - 原类型
      Returns:
      是否可转化
    • isAssignable

      public static boolean isAssignable(Class<?>[] classArray, Class<?>[] toClassArray, boolean autoboxing)
      检查目标类是否可以从原类转化 转化包括: 1、原类是对象,目标类型是原类型实现的接口 2、目标类型是原类型的父类 3、两者是原始类型或者包装类型(相互转换)
      Parameters:
      classArray - 目标类型
      toClassArray - 原类型
      autoboxing - 自动操作
      Returns:
      是否可转化
    • isAssignable

      public static boolean isAssignable(Class<?> cls, Class<?> toClass, boolean autoboxing)
    • isPublic

      public static boolean isPublic(Class<?> clazz)
      指定类是否为Public
      Parameters:
      clazz - 类
      Returns:
      是否为public
    • isPublic

      public static boolean isPublic(Method method)
      指定方法是否为Public
      Parameters:
      method - 方法
      Returns:
      是否为public
    • isNotPublic

      public static boolean isNotPublic(Class<?> clazz)
      指定类是否为非public
      Parameters:
      clazz - 类
      Returns:
      是否为非public
    • isNotPublic

      public static boolean isNotPublic(Method method)
      指定方法是否为非public
      Parameters:
      method - 方法
      Returns:
      是否为非public
    • isStatic

      public static boolean isStatic(Method method)
      是否为静态方法
      Parameters:
      method - 方法
      Returns:
      是否为静态方法
    • setAccessible

      public static Method setAccessible(Method method)
      设置方法为可访问
      Parameters:
      method - 方法
      Returns:
      方法
    • isSynthetic

      public static boolean isSynthetic(Field field)
      是否是合成字段(由java编译器生成的)
      Parameters:
      field - 字段
      Returns:
      是否是合成字段
    • isSynthetic

      public static boolean isSynthetic(Method method)
      是否是合成方法(由java编译器生成的)
      Parameters:
      method - 方法
      Returns:
      是否是合成方法
    • isSynthetic

      public static boolean isSynthetic(Class<?> clazz)
      是否是合成类(由java编译器生成的)
      Parameters:
      clazz - 类
      Returns:
      是否是合成
    • isAbstract

      public static boolean isAbstract(Method method)
      是否抽象方法
      Parameters:
      method - 方法
      Returns:
      是否抽象方法
    • isAbstract

      public static boolean isAbstract(Class<?> clazz)
      是否为抽象类
      Parameters:
      clazz - 类
      Returns:
      是否为抽象类
    • isNormalClass

      public static boolean isNormalClass(Class<?> clazz)
      是否为标准的类 这个类必须:
       1、非接口
       2、非抽象类
       3、非Enum枚举
       4、非数组
       5、非注解
       6、非原始类型(int, long等)
       
      Parameters:
      clazz - 类
      Returns:
      是否为标准类
    • isEnum

      public static boolean isEnum(Class<?> clazz)
      判断类是否为枚举类型
      Parameters:
      clazz - 类
      Returns:
      是否为枚举类型
    • getTypeArgument

      public static Class<?> getTypeArgument(Class<?> clazz)
      获得给定类的第一个泛型参数
      Parameters:
      clazz - 被检查的类,必须是已经确定泛型类型的类
      Returns:
      Class
    • getTypeArgument

      public static Class<?> getTypeArgument(Class<?> clazz, int index)
      获得给定类的泛型参数
      Parameters:
      clazz - 被检查的类,必须是已经确定泛型类型的类
      index - 泛型类型的索引号,既第几个泛型类型
      Returns:
      Class
    • getPackage

      public static String getPackage(Class<?> clazz)
      获得给定类所在包的名称 例如:org.aoju.bus.core.toolkit
      Parameters:
      clazz - 类
      Returns:
      包名
    • getPackagePath

      public static String getPackagePath(Class<?> clazz)
      获得给定类所在包的路径 例如:
      Parameters:
      clazz - 类
      Returns:
      包名
    • getDefaultValue

      public static Object getDefaultValue(Class<?> clazz)
      获取指定类型分的默认值 默认值规则为:
       1、如果为原始类型,返回0
       2、非原始类型返回null
       
      Parameters:
      clazz - 类
      Returns:
      默认值
    • getPrimitiveDefaultValue

      public static Object getPrimitiveDefaultValue(Class<?> clazz)
      获取指定原始类型分的默认值 默认值规则为:
       1、如果为原始类型,返回0
       2、非原始类型返回null
       
      Parameters:
      clazz - 类
      Returns:
      默认值
    • getDefaultValues

      public static Object[] getDefaultValues(Class<?>... classes)
      获得默认值列表
      Parameters:
      classes - 值类型
      Returns:
      默认值列表
    • getClassLoader

      public static ClassLoader getClassLoader()
      获取ClassLoader 获取顺序如下:
       1、获取当前线程的ContextClassLoader
       2、获取ClassKit类对应的ClassLoader
       3、获取系统ClassLoader(ClassLoader.getSystemClassLoader())
       
      Returns:
      类加载器
    • getClassPath

      public static String getClassPath()
      获得ClassPath,将编码后的中文路径解码为原字符 这个ClassPath路径会文件路径被标准化处理
      Returns:
      ClassPath
    • getClassPath

      public static String getClassPath(boolean isEncoded)
      获得ClassPath,这个ClassPath路径会文件路径被标准化处理
      Parameters:
      isEncoded - 是否编码路径中的中文
      Returns:
      ClassPath
    • getClassPathURL

      public static URL getClassPathURL()
      获得ClassPath URL
      Returns:
      ClassPath URL
    • getResourceURL

      public static URL getResourceURL(String resource) throws InstrumentException
      获得资源的URL 路径用/分隔,例如:
       config/a/db.config
       spring/xml/test.xml
       
      Parameters:
      resource - 资源(相对Classpath的路径)
      Returns:
      资源URL
      Throws:
      InstrumentException - 异常
      See Also:
    • fillBean

      public static <T> T fillBean(T bean, ValueProvider<String> valueProvider, CopyOptions copyOptions)
      填充Bean的核心方法
      Type Parameters:
      T - Bean类型
      Parameters:
      bean - Bean
      valueProvider - 值提供者
      copyOptions - 拷贝选项,见 CopyOptions
      Returns:
      Bean
    • loadClass

      public static <T> Class<T> loadClass(String name) throws InstrumentException
      加载类,通过传入类的字符串,返回其对应的类名,使用默认ClassLoader并初始化类(调用static模块内容和初始化static属性) 扩展Class.forName(String, boolean, ClassLoader)方法,支持以下几类类名的加载:
       1、原始类型,例如:int
       2、数组类型,例如:int[]、Long[]、String[]
       3、内部类,例如:java.lang.Thread.State会被转为java.lang.Thread$State加载
       
      Type Parameters:
      T - 对象
      Parameters:
      name - 类名
      Returns:
      类名对应的类
      Throws:
      InstrumentException - 没有类名对应的类时抛出此异常
    • loadClass

      public static <T> Class<T> loadClass(String name, boolean isInitialized) throws InstrumentException
      加载类,通过传入类的字符串,返回其对应的类名,使用默认ClassLoader 扩展Class.forName(String, boolean, ClassLoader)方法,支持以下几类类名的加载:
       1、原始类型,例如:int
       2、数组类型,例如:int[]、Long[]、String[]
       3、内部类,例如:java.lang.Thread.State会被转为java.lang.Thread$State加载
       
      Type Parameters:
      T - 对象
      Parameters:
      name - 类名
      isInitialized - 是否初始化类(调用static模块内容和初始化static属性)
      Returns:
      类名对应的类
      Throws:
      InstrumentException - 没有类名对应的类时抛出此异常
    • loadClass

      public static Class<?> loadClass(String name, ClassLoader classLoader, boolean isInitialized) throws InstrumentException
      加载类,通过传入类的字符串,返回其对应的类名 此方法支持缓存,第一次被加载的类之后会读取缓存中的类 加载失败的原因可能是此类不存在或其关联引用类不存在 扩展Class.forName(String, boolean, ClassLoader)方法,支持以下几类类名的加载:
       1、原始类型,例如:int
       2、数组类型,例如:int[]、Long[]、String[]
       3、内部类,例如:java.lang.Thread.State会被转为java.lang.Thread$State加载
       
      Parameters:
      name - 类名
      classLoader - ClassLoader,null 则使用系统默认ClassLoader
      isInitialized - 是否初始化类(调用static模块内容和初始化static属性)
      Returns:
      类名对应的类
      Throws:
      InstrumentException - 没有类名对应的类时抛出此异常
    • loadPrimitiveClass

      public static Class<?> loadPrimitiveClass(String name)
      加载原始类型的类 包括原始类型、原始类型数组和void
      Parameters:
      name - 原始类型名,比如 int
      Returns:
      原始类型类
    • getJarClassLoader

      public static JarLoaders getJarClassLoader(File jarOrDir)
      创建新的JarLoaders,并使用此Classloader加载目录下的class文件和jar文件
      Parameters:
      jarOrDir - jar文件或者包含jar和class文件的目录
      Returns:
      JarLoaders
    • loadClass

      public static Class<?> loadClass(File jarOrDir, String name)
      加载外部类
      Parameters:
      jarOrDir - jar文件或者包含jar和class文件的目录
      name - 类名
      Returns:
    • isPresent

      public static boolean isPresent(String className)
      指定类是否被提供,使用默认ClassLoader 通过调用loadClass(String, ClassLoader, boolean)方法尝试加载指定类名的类,如果加载失败返回false 加载失败的原因可能是此类不存在或其关联引用类不存在
      Parameters:
      className - 类名
      Returns:
      是否被提供
    • isPresent

      public static boolean isPresent(String className, ClassLoader classLoader)
      指定类是否被提供 通过调用loadClass(String, ClassLoader, boolean)方法尝试加载指定类名的类,如果加载失败返回false 加载失败的原因可能是此类不存在或其关联引用类不存在
      Parameters:
      className - 类名
      classLoader - ClassLoader
      Returns:
      是否被提供
    • getPackageName

      public static String getPackageName(Class<?> clazz)
      获取给定类的包的名称. 类似java.lang.String 字符串类
      Parameters:
      clazz - 类
      Returns:
      包名,如果类在默认包中定义,则为空字符串
    • getPackageName

      public static String getPackageName(String className)
      获取给定类的包的名称. 类似java.lang.String 字符串类.
      Parameters:
      className - 完整的类名
      Returns:
      包名,如果类在默认包中定义,则为空字符串
    • forName

      public static Class<?> forName(String name, ClassLoader classLoader) throws ClassNotFoundException, LinkageError
      替换Class. forname(),它也返回原语的类实例(例如“int”)和数组类名(例如“[]”). 还能够以Java源代码风格解析内部类名(例如,“java.lang.Thread 用" State"代替"java.lang.Thread$State").
      Parameters:
      name - 类的名称
      classLoader - 要使用的类装入器(可能是null,表示默认的类装入器)
      Returns:
      提供的名称的类实例
      Throws:
      ClassNotFoundException - 如果没有找到该类
      LinkageError - 如果无法加载类文件
    • resolvePrimitiveClassName

      public static Class<?> resolvePrimitiveClassName(String name)
    • getDefaultClassLoader

      public static ClassLoader getDefaultClassLoader()
    • resolveClassName

      public static Class<?> resolveClassName(String className, ClassLoader classLoader) throws IllegalArgumentException
      将给定的类名称解析为Class实例
      Parameters:
      className - 类名称
      classLoader - 使用的类加载器
      Returns:
      提供的名称的类实例
      Throws:
      IllegalArgumentException - 如果类名不可解析(即找不到该类或无法加载该类文件)
      See Also:
    • getShortClassName

      public static String getShortClassName(Object object, String valueIfNull)
      获取类名减去Class的包名
      Parameters:
      object - 要获取其短名称的类可能为空
      valueIfNull - 如果为空,返回的值
      Returns:
      没有包名或空值的对象的类名
    • getShortClassName

      public static String getShortClassName(Class<?> cls)
      Class中获取类名减去包名.
      Parameters:
      cls - 类的短名称.
      Returns:
      没有包名或空字符串的类名
    • getShortClassName

      public static String getShortClassName(String className)
      从字符串中获取类名减去包名
      Parameters:
      className - 获取短名称的类名
      Returns:
      没有包名或空字符串的类的类名
    • getSimpleName

      public static String getSimpleName(Class<?> cls)
      简单的类名
      Parameters:
      cls - 要为其获取简单名称的类;可能是零
      Returns:
      简单的类名
      See Also:
    • getSimpleName

      public static String getSimpleName(Class<?> cls, String valueIfNull)
      简单的类名
      Parameters:
      cls - 要为其获取简单名称的类
      valueIfNull - 如果为空,返回的值
      Returns:
      简单的类名
      See Also:
    • getSimpleName

      public static String getSimpleName(Object object)
      简单的类名
      Parameters:
      object - 获取简单类名的对象;可能是零
      Returns:
      简单的类名
      See Also:
    • getSimpleName

      public static String getSimpleName(Object object, String valueIfNull)
      简单的类名
      Parameters:
      object - 要为其获取简单名称的对象
      valueIfNull - 对象或者null
      Returns:
      简单的类名
      See Also:
    • primitiveToWrapper

      public static Class<?> primitiveToWrapper(Class<?> cls)
      将指定的基元类对象转换为其对应的包装器类对象
      Parameters:
      cls - 要转换的类可以为null
      Returns:
      如果输入为null,则返回cls, 否则返回cls 的包装器类
    • primitivesToWrappers

      public static Class<?>[] primitivesToWrappers(Class<?>... classes)
      将原语类对象的指定数组转换为其相应包装器类对象的数组
      Parameters:
      classes - 要转换的类数组可以为空或空
      Returns:
      包含每个给定类、包装器类或原始类(如果类不是原语)的数组. null如果输入为空。如果传入的是空数组,则为空数组.
    • wrapperToPrimitive

      public static Class<?> wrapperToPrimitive(Class<?> cls)
      将指定的包装器类转换为其对应的基元类
      Parameters:
      cls - 要转换的类,可以是null
      Returns:
      对应的原类型if cls是包装类,否则null
      See Also:
    • wrappersToPrimitives

      public static Class<?>[] wrappersToPrimitives(Class<?>... classes)
      将包装器类对象的指定数组转换为其相应基元类对象的数组
      Parameters:
      classes - 要转换的类数组可以为空或空
      Returns:
      一个数组,其中包含每个给定类的基元类或null(如果原始类不是包装类). null如果输入为空。如果传入的是空数组,则为空数组.
      See Also:
    • getAllInterfaces

      public static List<Class<?>> getAllInterfaces(Class<?> cls)
      获取由给定接口实现的所有接口的List 类及其超类.
      Parameters:
      cls - 要查找的类可能是null
      Returns:
      接口的List按顺序排列,null如果输入为空
    • getAllInterfaces

      public static void getAllInterfaces(Class<?> cls, HashSet<Class<?>> interfacesFound)
      获取指定类的接口.
      Parameters:
      cls - 要查找的类可能是null
      interfacesFound - 类接口的Set
    • getAllSuperclasses

      public static List<Class<?>> getAllSuperclasses(Class<?> cls)
      获取给定类的超类的List.
      Parameters:
      cls - 要查找的类可能是null
      Returns:
      类的List从这个null开始,如果输入为空
    • toClass

      public static Class<?>[] toClass(Object... array)
    • hierarchy

      public static Iterable<Class<?>> hierarchy(Class<?> type)
      获取一个Iterable,它可以按照从子类到超类的升序遍历类层次结构,不包括接口.
      Parameters:
      type - 获取类层次结构的类型
      Returns:
      可迭代的在给定类的类层次结构上的可迭代的
    • hierarchy

      public static Iterable<Class<?>> hierarchy(Class<?> type, ClassKit.Interfaces interfacesBehavior)
      获取一个Iterable,它可以按照从子类到超类的升序遍历类层次结构.
      Parameters:
      type - 获取类层次结构的类型
      interfacesBehavior - 指示是否包含或排除接口的开关
      Returns:
      可迭代的在给定类的类层次结构上的可迭代的
    • isPrimitiveOrWrapper

      public static boolean isPrimitiveOrWrapper(Class<?> type)
      返回给定的type是原始包装器还是原始包装器 (BooleanByteCharacterShortIntegerLongDoubleFloat).
      Parameters:
      type - 要查询或空的类.
      Returns:
      如果给定的type是一个原始或原始包装器(BooleanByteCharacterShortIntegerLongDoubleFloat),则为真..
    • isUserLevelMethod

      public static boolean isUserLevelMethod(Method method)
    • convertClassNameToResourcePath

      public static String convertClassNameToResourcePath(String className)
      把一个'.'的类路径转换为基于/的类路径
      Parameters:
      className - 完整雷鸣
      Returns:
      对应的资源路径,指向类
    • getClassVar

      public static String getClassVar(String className)
      获取对应类的默认变量名
      Parameters:
      className - 类名称
      Returns:
      类的默认变量名
    • getAllFieldList

      public static List<Field> getAllFieldList(Class clazz)
      获取类所有的字段信息 ps: 这个方法有个问题 如果子类和父类有相同的字段 会不会重复 1. 还会获取到 serialVersionUID 这个字段
      Parameters:
      clazz - 类
      Returns:
      字段列表
    • newInstance

      public static <T> T newInstance(Class<T> clazz)
      获取对象的实例化
      Type Parameters:
      T - 泛型
      Parameters:
      clazz - 类
      Returns:
      实例化对象
    • getAllFieldsReadMethods

      public static List<Method> getAllFieldsReadMethods(Class clazz) throws IntrospectionException
      获取所有字段的 read 方法列表
      Parameters:
      clazz - 类信息
      Returns:
      方法列表
      Throws:
      IntrospectionException - if any
    • invokeMethod

      public static Object invokeMethod(Object object, String methodName) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      Parameters:
      object - 调用此对象上的方法
      methodName - 具有此名称的get方法
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeMethod

      public static Object invokeMethod(Object object, boolean forceAccess, String methodName) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      Parameters:
      object - 调用此对象上的方法
      forceAccess - 强制访问调用方法,即使该方法不可访问
      methodName - 具有此名称的get方法
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeMethod

      public static Object invokeMethod(Object object, String methodName, Object... args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用其参数类型与对象类型匹配的已命名方法.

      此方法将委托给 getMatchingAccessibleMethod(Class, String, Class[]).

      这是包装器invokeMethod(Object object, String methodName, Object[] args, Class[] parameterTypes).

      Parameters:
      object - 调用此对象上的方法
      methodName - 具有此名称的get方法
      args - 参数信息
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeMethod

      public static Object invokeMethod(Object object, boolean forceAccess, String methodName, Object... args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用其参数类型与对象类型匹配的已命名方法
      Parameters:
      object - 调用此对象上的方法
      forceAccess - 强制访问调用方法,即使该方法不可访问
      methodName - 具有此名称的get方法
      args - 参数信息
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeMethod

      public static Object invokeMethod(Object object, boolean forceAccess, String methodName, Object[] args, Class<?>[] parameterTypes) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用其参数类型与对象类型匹配的已命名方法.
      Parameters:
      object - 调用此对象上的方法
      forceAccess - 强制访问调用方法,即使该方法不可访问
      methodName - 具有此名称的get方法
      args - 参数信息
      parameterTypes - 参数类型
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeMethod

      public static Object invokeMethod(Object object, String methodName, Object[] args, Class<?>[] parameterTypes) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用其参数类型与对象类型匹配的已命名方法.
      Parameters:
      object - 调用此对象上的方法
      methodName - 具有此名称的get方法
      args - 参数信息
      parameterTypes - 参数类型
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeExactMethod

      public static Object invokeExactMethod(Object object, String methodName) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用参数类型与对象类型完全匹配的方法
      Parameters:
      object - 调用此对象上的方法
      methodName - 具有此名称的get方法
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeExactMethod

      public static Object invokeExactMethod(Object object, String methodName, Object... args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用没有参数的方法
      Parameters:
      object - 调用此对象上的方法
      methodName - 具有此名称的get方法
      args - 参数信息
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeExactMethod

      public static Object invokeExactMethod(Object object, String methodName, Object[] args, Class<?>[] parameterTypes) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用参数类型与给定参数类型完全匹配的方法
      Parameters:
      object - 调用此对象上的方法
      methodName - 具有此名称的get方法
      args - 参数信息
      parameterTypes - 参数类型
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeExactStaticMethod

      public static Object invokeExactStaticMethod(Class<?> cls, String methodName, Object[] args, Class<?>[] parameterTypes) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用参数类型与给定参数类型完全匹配的static方法
      Parameters:
      cls - 调用该类上的静态方法
      methodName - 具有此名称的get方法
      args - 参数信息
      parameterTypes - 参数类型
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeStaticMethod

      public static Object invokeStaticMethod(Class<?> cls, String methodName, Object... args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用一个名为static的方法,该方法的参数类型与对象类型匹配
      Parameters:
      cls - 调用该类上的静态方法
      methodName - 具有此名称的get方法
      args - 参数信息
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeStaticMethod

      public static Object invokeStaticMethod(Class<?> cls, String methodName, Object[] args, Class<?>[] parameterTypes) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用一个名为static的方法,该方法的参数类型与对象类型匹配
      Parameters:
      cls - 调用该类上的静态方法
      methodName - 具有此名称的get方法
      args - 参数信息
      parameterTypes - 参数类型
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • invokeExactStaticMethod

      public static Object invokeExactStaticMethod(Class<?> cls, String methodName, Object... args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      调用参数类型与对象类型完全匹配的static方法
      Parameters:
      cls - 调用该类上的静态方法
      methodName - 具有此名称的get方法
      args - 参数信息
      Returns:
      被调用方法返回的值
      Throws:
      NoSuchMethodException - 如果没有这样的可访问方法
      InvocationTargetException - 包装由调用的方法引发的异常
      IllegalAccessException - 如果请求的方法不能通过反射访问
    • getAccessibleMethod

      public static Method getAccessibleMethod(Class<?> cls, String methodName, Class<?>... parameterTypes)
      返回具有给定名称和参数的可访问方法(即可以通过反射调用的方法)
      Parameters:
      cls - 从这个类获取方法
      methodName - 具有此名称的get方法
      parameterTypes - 参数类型
      Returns:
      访问方法
    • getAccessibleMethod

      public static Method getAccessibleMethod(Method method)
      返回实现指定方法的可访问方法(即可以通过反射调用的方法)。如果找不到这样的方法,返回null
      Parameters:
      method - 我们希望调用的方法
      Returns:
      访问方法
    • getMatchingAccessibleMethod

      public static Method getMatchingAccessibleMethod(Class<?> cls, String methodName, Class<?>... parameterTypes)
      查找与给定名称匹配且具有兼容参数的可访问方法. 相容参数是指每个方法参数都可以从给定的参数中分配
      Parameters:
      cls - 在这个类中查找方法
      methodName - 使用此名称查找方法
      parameterTypes - 寻找参数最一致的方法
      Returns:
      访问方法
    • getMatchingMethod

      public static Method getMatchingMethod(Class<?> cls, String methodName, Class<?>... parameterTypes)
      检索是否可访问的方法
      Parameters:
      cls - 在这个类中查找方法
      methodName - 使用此名称查找方法
      parameterTypes - 寻找参数最一致的方法
      Returns:
      访问方法
    • getMethodsWithAnnotation

      public static Method[] getMethodsWithAnnotation(Class<?> cls, Class<? extends Annotation> annotationCls)
      获取使用给定注释进行注释的给定类的所有类级公共方法.
      Parameters:
      cls - 要查询的 Class
      annotationCls - 必须在要匹配的方法上出现的 Annotation
      Returns:
      方法数组.
    • getMethodsListWithAnnotation

      public static List<Method> getMethodsListWithAnnotation(Class<?> cls, Class<? extends Annotation> annotationCls)
      获取使用给定注释进行注释的给定类的所有类级公共方法.
      Parameters:
      cls - 要查询的 Class
      annotationCls - 必须在要匹配的方法上出现的 Annotation
      Returns:
      方法列表
    • getMethodsWithAnnotation

      public static Method[] getMethodsWithAnnotation(Class<?> cls, Class<? extends Annotation> annotationCls, boolean searchSupers, boolean ignoreAccess)
      获取使用给定注释进行注释的给定类的所有方法.
      Parameters:
      cls - 要查询的 Class
      annotationCls - 必须在要匹配的方法上出现的 Annotation
      searchSupers - 确定是否应在给定类的整个继承层次结构中执行查找
      ignoreAccess - 确定是否应该考虑非公共方法
      Returns:
      方法数组
    • getMethodsListWithAnnotation

      public static List<Method> getMethodsListWithAnnotation(Class<?> cls, Class<? extends Annotation> annotationCls, boolean searchSupers, boolean ignoreAccess)
      获取使用给定注释进行注释的给定类的所有方法.
      Parameters:
      cls - 要查询的 Class
      annotationCls - 必须在要匹配的方法上出现的 Annotation
      searchSupers - 确定是否应在给定类的整个继承层次结构中执行查找
      ignoreAccess - 确定是否应该考虑非公共方法
      Returns:
      方法数组
    • getAnnotation

      public static <A extends Annotation> A getAnnotation(Method method, Class<A> annotationCls, boolean searchSupers, boolean ignoreAccess)
      获取具有给定注释类型的注释对象,该注释类型出现在给定方法上,或可选地出现在超类和接口中的任何等效方法上。如果注释类型不存在,则返回null
      Type Parameters:
      A - 注解类型
      Parameters:
      method - 要查询的 Method to query
      annotationCls - 必须在要匹配的方法上出现的 Annotation
      searchSupers - 确定是否应在给定类的整个继承层次结构中执行查找
      ignoreAccess - 确定是否应该考虑非公共方法
      Returns:
      第一个匹配注释
    • getField

      public static Field getField(Class<?> cls, String fieldName)
      根据名称获取可访问的Field范围
      Parameters:
      cls - 要反射的Class 不能是null
      fieldName - 要获取的字段名
      Returns:
      字段对象
    • getField

      public static Field getField(Class<?> cls, String fieldName, boolean forceAccess)
      按名称获取可访问的Field,如果请求则中断作用域.
      Parameters:
      cls - 要反映的Class不能是null
      fieldName - 要获取的字段名
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制. false将只匹配public字段
      Returns:
      字段对象
    • getDeclaredField

      public static Field getDeclaredField(Class<?> clazz, String fieldName)
      查找指定类中的所有字段(包括非public字段), 字段不存在则返回null
      Parameters:
      clazz - 被查找字段的类
      fieldName - 字段名
      Returns:
      属性对象
    • getDeclaredField

      public static Field getDeclaredField(Class<?> clazz, String fieldName, boolean forceAccess)
      按名称获取可访问的Field,如果请求则中断作用域。只考虑指定的类
      Parameters:
      clazz - 被查找字段的类
      fieldName - 字段名
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean)方法打破范围限制.false将只匹配public字段
      Returns:
      属性对象
    • getAllFields

      public static Field[] getAllFields(Class<?> cls)
      获取给定类及其父类的所有字段(如果有).
      Parameters:
      cls - 要查询的 Class
      Returns:
      字段数组(可能为空)
    • getAllFieldsList

      public static List<Field> getAllFieldsList(Class<?> cls)
      获取给定类及其父类的所有字段(如果有).
      Parameters:
      cls - 要查询的 Class
      Returns:
      字段数组(可能为空)
    • getFieldsWithAnnotation

      public static Field[] getFieldsWithAnnotation(Class<?> cls, Class<? extends Annotation> annotationCls)
      获取用给定注释注释的给定类及其父类的所有字段(如果有).
      Parameters:
      cls - 要查询的 Class
      annotationCls - 必须在要匹配的方法上出现的 Annotation
      Returns:
      字段数组(可能为空)
    • getFieldsListWithAnnotation

      public static List<Field> getFieldsListWithAnnotation(Class<?> cls, Class<? extends Annotation> annotationCls)
      获取用给定注释注释的给定类及其父类的所有字段(如果有).
      Parameters:
      cls - 要查询的 Class
      annotationCls - 必须在要匹配的方法上出现的 Annotation
      Returns:
      字段列表(可能为空).
    • readStaticField

      public static Object readStaticField(Field field) throws IllegalAccessException
      读取可访问的static Field.
      Parameters:
      field - 字段信息
      Returns:
      字段值
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readStaticField

      public static Object readStaticField(Field field, boolean forceAccess) throws IllegalAccessException
      读取一个静态 Field.
      Parameters:
      field - 字段信息
      forceAccess - 是否使用 AccessibleObject.setAccessible(boolean) 方法打破范围限制
      Returns:
      字段值
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readStaticField

      public static Object readStaticField(Class<?> cls, String fieldName) throws IllegalAccessException
      读取指定的public static Field。将考虑超类.
      Parameters:
      cls - 要反映的Class不能是null
      fieldName - 要获取的字段名
      Returns:
      字段的值
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readStaticField

      public static Object readStaticField(Class<?> cls, String fieldName, boolean forceAccess) throws IllegalAccessException
      读取指定的static Field,将考虑超类
      Parameters:
      cls - 要反映的Class不能是null
      fieldName - 要获取的字段名
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制.false将只匹配public字段
      Returns:
      字段对象
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readDeclaredStaticField

      public static Object readDeclaredStaticField(Class<?> cls, String fieldName) throws IllegalAccessException
      按名称获取static Field的值。字段必须是public.只考虑指定的类
      Parameters:
      cls - 要反映的Class不能是null
      fieldName - 要获取的字段名
      Returns:
      字段的值
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readDeclaredStaticField

      public static Object readDeclaredStaticField(Class<?> cls, String fieldName, boolean forceAccess) throws IllegalAccessException
      按名称获取static Field的值。字段必须是public.只考虑指定的类
      Parameters:
      cls - 要反映的Class不能是null
      fieldName - 要获取的字段名
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制.false将只匹配public字段
      Returns:
      字段对象
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readField

      public static Object readField(Field field, Object target) throws IllegalAccessException
      读取一个可访问的 Field.
      Parameters:
      field - 要使用的字段
      target - 要调用的对象可以是null,用于static字段
      Returns:
      字段值
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readField

      public static Object readField(Field field, Object target, boolean forceAccess) throws IllegalAccessException
      读取一个可访问的 Field.
      Parameters:
      field - 要使用的字段
      target - 要调用的对象可以是null,用于static字段
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制.
      Returns:
      字段值
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readField

      public static Object readField(Object target, String fieldName) throws IllegalAccessException
      Reads the named public Field. Superclasses will be considered.
      Parameters:
      target - target 要调用的对象可以是null,用于static字段
      fieldName - 要获取的字段名
      Returns:
      字段值
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readField

      public static Object readField(Object target, String fieldName, boolean forceAccess) throws IllegalAccessException
      读取指定的Field 将考虑超类.
      Parameters:
      target - target 要调用的对象可以是null,用于static字段
      fieldName - 要获取的字段名
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制.false将只匹配public字段
      Returns:
      字段值
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readDeclaredField

      public static Object readDeclaredField(Object target, String fieldName) throws IllegalAccessException
      读取指定的public Field 只考虑指定对象的类.
      Parameters:
      target - target 要调用的对象可以是null,用于static字段
      fieldName - 要获取的字段名
      Returns:
      字段值
      Throws:
      IllegalAccessException - 如果字段不可访问
    • readDeclaredField

      public static Object readDeclaredField(Object target, String fieldName, boolean forceAccess) throws IllegalAccessException
      按名称获取Field值 只考虑指定对象的类.
      Parameters:
      target - target 要调用的对象可以是null,用于static字段
      fieldName - 要获取的字段名
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制.false将只匹配public字段
      Returns:
      字段值
      Throws:
      IllegalAccessException - 如果字段不可访问
    • writeStaticField

      public static void writeStaticField(Field field, Object value) throws IllegalAccessException
      写一个public static Field.
      Parameters:
      field - 字段
      value - 值
      Throws:
      IllegalAccessException - 如果字段不是publicfinal
    • writeStaticField

      public static void writeStaticField(Field field, Object value, boolean forceAccess) throws IllegalAccessException
      写一个静态方法 Field.
      Parameters:
      field - 字段
      value - 值
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制 false将只匹配public字段
      Throws:
      IllegalAccessException - 如果字段不是publicfinal
    • writeStaticField

      public static void writeStaticField(Class<?> cls, String fieldName, Object value) throws IllegalAccessException
      写一个命名public static Field 将考虑超类
      Parameters:
      cls - 查找的类Class
      fieldName - 字段名
      value - 值
      Throws:
      IllegalAccessException - 如果字段不是publicfinal
    • writeStaticField

      public static void writeStaticField(Class<?> cls, String fieldName, Object value, boolean forceAccess) throws IllegalAccessException
      写一个命名的static Field 将考虑超类.
      Parameters:
      cls - 查找的类Class
      fieldName - 字段名
      value - 值
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制 false将只匹配public字段
      Throws:
      IllegalAccessException - 如果字段不是publicfinal
    • writeDeclaredStaticField

      public static void writeDeclaredStaticField(Class<?> cls, String fieldName, Object value) throws IllegalAccessException
      写一个命名 public static Field 只考虑指定的类.
      Parameters:
      cls - 查找的类Class
      fieldName - 字段名
      value - 值
      Throws:
      IllegalAccessException - 如果字段不是publicfinal
    • writeDeclaredStaticField

      public static void writeDeclaredStaticField(Class<?> cls, String fieldName, Object value, boolean forceAccess) throws IllegalAccessException
      写一个命名的static Field只考虑指定的类。
      Parameters:
      cls - 查找的类Class
      fieldName - 字段名
      value - 值
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制 false将只匹配public字段.
      Throws:
      IllegalAccessException - 如果字段不是publicfinal
    • writeField

      public static void writeField(Field field, Object target, Object value) throws IllegalAccessException
      写一个可访问的Field.
      Parameters:
      field - 字段
      target - 要调用的对象可以是null,用于static字段
      value - 值
      Throws:
      IllegalAccessException - 如果字段或目标是null,那么该字段是不可访问的, 或者是final,或者value是不可分配的
    • writeField

      public static void writeField(Field field, Object target, Object value, boolean forceAccess) throws IllegalAccessException
      写一个可访问的Field.
      Parameters:
      field - 字段
      target - 要调用的对象可以是null,用于static字段
      value - 值
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制 false将只匹配public字段
      Throws:
      IllegalAccessException - 如果字段不可访问或final
    • removeFinalModifier

      public static void removeFinalModifier(Field field)
      移除修饰符 Field.
      Parameters:
      field - 删除最后的修改器
      Throws:
      IllegalArgumentException - 如果字段是null
    • removeFinalModifier

      public static void removeFinalModifier(Field field, boolean forceAccess)
      移除修饰符 Field.
      Parameters:
      field - 字段属性
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制 false将只匹配public字段.
      Throws:
      IllegalArgumentException - 如果字段是null
    • writeField

      public static void writeField(Object target, String fieldName, Object value) throws IllegalAccessException
      处理public Field 将考虑超类
      Parameters:
      target - 目标对象不能是null
      fieldName - 要获取的字段名
      value - 值信息
      Throws:
      IllegalAccessException - 如果字段不可访问
    • writeField

      public static void writeField(Object target, String fieldName, Object value, boolean forceAccess) throws IllegalAccessException
      处理public Field 将考虑超类.
      Parameters:
      target - 目标对象不能是null
      fieldName - 要获取的字段名
      value - 值信息
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制 false将只匹配public字段.
      Throws:
      IllegalAccessException - 如果字段不可访问
    • writeDeclaredField

      public static void writeDeclaredField(Object target, String fieldName, Object value) throws IllegalAccessException
      写一个public Field 只考虑指定的类.
      Parameters:
      target - 目标对象不能是null
      fieldName - 要获取的字段名
      value - 值信息
      Throws:
      IllegalAccessException - 如果字段不可访问
    • writeDeclaredField

      public static void writeDeclaredField(Object target, String fieldName, Object value, boolean forceAccess) throws IllegalAccessException
      处理public Field 只考虑指定的类.
      Parameters:
      target - 目标对象不能是null
      fieldName - 要获取的字段名
      value - 值信息
      forceAccess - 是否使用AccessibleObject.setAccessible(boolean) 方法打破范围限制 false将只匹配public字段.
      Throws:
      IllegalAccessException - 如果字段不可访问
    • getUserClass

      public static Class<?> getUserClass(Object instance)
      为给定实例返回用户定义的类:通常只是给定实例的类, 但如果是cglib生成的子类,则返回原始类
      Parameters:
      instance - 要检查的实例
      Returns:
      用户定义的类
    • getUserClass

      public static Class<?> getUserClass(Class<?> clazz)
      为给定的类返回用户定义的类:通常只是给定的类, 但对于cglib生成的子类,则是原始类.
      Parameters:
      clazz - 要检查的类
      Returns:
      用户定义的类
    • isNumberOrStringType

      public static boolean isNumberOrStringType(Class<?> type)
      判断这个字段是否是数字类型或字符串类型
      Parameters:
      type - 字段类型
      Returns:
      true:是数字或字符串类型
    • setAccessibleWorkaround

      public static boolean setAccessibleWorkaround(AccessibleObject accessibleObject)
      默认访问超类的解决方法
      Parameters:
      accessibleObject - AccessibleObject设置为可访问
      Returns:
      指示对象的可访问性是否设置为true的布尔值
    • isPackageAccess

      public static boolean isPackageAccess(int modifiers)
      返回给定的一组修饰符是否允许程序包访问
      Parameters:
      modifiers - to test
      Returns:
      除非检测到 package / protected / private修饰符,否则true
    • isAccessible

      public static boolean isAccessible(Member member)
      返回Member是否可访问
      Parameters:
      member - 检查成员
      Returns:
      the true,如果可以访问member
    • compareConstructorFit

      public static int compareConstructorFit(Constructor<?> left, Constructor<?> right, Class<?>[] actual)
      根据两个构造函数与一组运行时参数类型的匹配程度进行比较 从而使比较结果按顺序排序的列表首先返回最佳匹配(最低)
      Parameters:
      left - 左构造函数
      right - 右构造函数
      actual - 运行时参数类型以匹配* * left / right
      Returns:
      compare语义一致的int
    • compareMethodFit

      public static int compareMethodFit(Method left, Method right, Class<?>[] actual)
      根据两个方法与一组运行时参数类型的匹配程度,比较两个方法的相对适应性, 这样,按比较结果排序的列表将首先返回最匹配的(最低)
      Parameters:
      left - 左方法
      right - 右方法
      actual - 运行时参数类型以匹配left / right
      Returns:
      compare语义一致的int
    • compareParameterTypes

      public static int compareParameterTypes(org.aoju.bus.core.toolkit.ClassKit.Executable left, org.aoju.bus.core.toolkit.ClassKit.Executable right, Class<?>[] actual)
      根据两个可执行文件与一组运行时参数类型的匹配程度来比较两个可执行文件的相对适合度 以便按比较结果排序的列表将首先返回最佳匹配项
      Parameters:
      left - 左可执行文件
      right - 右可执行文件
      actual - 运行时参数类型以匹配 left / right
      Returns:
      compare语义一致的int
    • getTotalTransformationCost

      public static float getTotalTransformationCost(Class<?>[] srcArgs, org.aoju.bus.core.toolkit.ClassKit.Executable executable)
      返回source参数列表中每个类的对象转换成本之和
      Parameters:
      srcArgs - 源参数
      executable - 执行文件以计算转换成本
      Returns:
      总转换成本
    • getObjectTransformationCost

      public static float getObjectTransformationCost(Class<?> srcClass, Class<?> destClass)
      获取将源类转换为目标类所需的步骤数 这表示对象层次图中的步骤数.
      Parameters:
      srcClass - 源类
      destClass - 目标类
      Returns:
      转换对象的成本
    • getPrimitivePromotionCost

      public static float getPrimitivePromotionCost(Class<?> srcClass, Class<?> destClass)
      获取将原始数字提升为另一种类型所需的步骤数
      Parameters:
      srcClass - (原始)源类
      destClass - (原始)目标类
      Returns:
      原始的成本
    • isMatchingMethod

      public static boolean isMatchingMethod(Method method, Class<?>[] parameterTypes)
    • isMatchingConstructor

      public static boolean isMatchingConstructor(Constructor<?> method, Class<?>[] parameterTypes)
    • isMatchingExecutable

      public static boolean isMatchingExecutable(org.aoju.bus.core.toolkit.ClassKit.Executable method, Class<?>[] parameterTypes)
    • isCglibProxy

      public static boolean isCglibProxy(Object object)
      验证类是否是cglib代理对象
      Parameters:
      object - the object to check
      Returns:
      true为是代理对象
    • isCglibProxyClass

      public static boolean isCglibProxyClass(Class<?> clazz)
      验证类是否是cglib生成类
      Parameters:
      clazz - the class to check
      Returns:
      true为是代理类
    • isCglibProxyClassName

      public static boolean isCglibProxyClassName(String className)
      验证类名是否为cglib代理类名
      Parameters:
      className - the class name to check
      Returns:
      true为是代理类
    • getCglibActualClass

      public static Class<?> getCglibActualClass(Class<?> clazz)
      获取cglib代理的真实类
      Parameters:
      clazz - 代理类
      Returns:
    • loadFirstAvailable

      public static <T> T loadFirstAvailable(Class<T> clazz)
      加载第一个可用服务,如果用户定义了多个接口实现类,只获取第一个不报错的服务。
      Type Parameters:
      T - 接口类型
      Parameters:
      clazz - 服务接口
      Returns:
      第一个服务接口实现对象,无实现返回null
    • loadFirst

      public static <T> T loadFirst(Class<T> clazz)
      加载第一个服务,如果用户定义了多个接口实现类,只获取第一个
      Type Parameters:
      T - 接口类型
      Parameters:
      clazz - 服务接口
      Returns:
      第一个服务接口实现对象,无实现返回null
    • load

      public static <T> ServiceLoader<T> load(Class<T> clazz)
      加载服务
      Type Parameters:
      T - 接口类型
      Parameters:
      clazz - 服务接口
      Returns:
      服务接口实现列表
    • load

      public static <T> ServiceLoader<T> load(Class<T> clazz, ClassLoader loader)
      加载服务
      Type Parameters:
      T - 接口类型
      Parameters:
      clazz - 服务接口
      loader - ClassLoader
      Returns:
      服务接口实现列表
    • loadList

      public static <T> List<T> loadList(Class<T> clazz)
      加载服务 并已list列表返回
      Type Parameters:
      T - 接口类型
      Parameters:
      clazz - 服务接口
      Returns:
      服务接口实现列表
    • loadList

      public static <T> List<T> loadList(Class<T> clazz, ClassLoader loader)
      加载服务 并已list列表返回
      Type Parameters:
      T - 接口类型
      Parameters:
      clazz - 服务接口
      loader - ClassLoader
      Returns:
      服务接口实现列表
    • getManifest

      public static Manifest getManifest(Class<?> cls)
      根据 class 获取 jar 包文件的 Manifest
      Parameters:
      cls - 类
      Returns:
      Manifest
    • getManifest

      public static Manifest getManifest(File classpathItem) throws InstrumentException
      获取 jar 包文件或项目目录下的 Manifest
      Parameters:
      classpathItem - 文件路径
      Returns:
      Manifest
      Throws:
      InstrumentException - IO异常
    • getManifest

      public static Manifest getManifest(JarURLConnection connection) throws InstrumentException
      根据 JarURLConnection 获取 jar 包文件的 Manifest
      Parameters:
      connection - JarURLConnection
      Returns:
      Manifest
      Throws:
      InstrumentException - IO异常
    • getManifest

      public static Manifest getManifest(JarFile jarFile) throws InstrumentException
      根据 JarURLConnection 获取 jar 包文件的 Manifest
      Parameters:
      jarFile - JarURLConnection
      Returns:
      Manifest
      Throws:
      InstrumentException - IO异常
    • compile

      public static boolean compile(String... sourceFiles)
      编译指定的源码文件
      Parameters:
      sourceFiles - 源码文件路径
      Returns:
      0表示成功,否则其他
    • getFileManager

      public static StandardJavaFileManager getFileManager()
      Returns:
      StandardJavaFileManager
    • getFileManager

      public static StandardJavaFileManager getFileManager(DiagnosticListener<? super JavaFileObject> diagnosticListener)
      Parameters:
      diagnosticListener - 异常收集器
      Returns:
      StandardJavaFileManager
    • getTask

      public static JavaCompiler.CompilationTask getTask(JavaFileManager fileManager, DiagnosticListener<? super JavaFileObject> diagnosticListener, Iterable<String> options, Iterable<? extends JavaFileObject> compilationUnits)
      新建编译任务
      Parameters:
      fileManager - JavaFileManager,用于管理已经编译好的文件
      diagnosticListener - 诊断监听
      options - 选项,例如 -cpXXX等
      compilationUnits - 编译单元,即需要编译的对象
      Returns:
      JavaCompiler.CompilationTask
    • getCompiler

      public static JavaSourceCompiler getCompiler(ClassLoader parent)
      Parameters:
      parent - 父ClassLoader
      Returns:
      JavaSourceCompiler
      See Also:
    • getLocation

      public static URL getLocation(Class<?> clazz)
      获取class类路径URL, 不管是否在jar包中都会返回文件夹的路径 class在jar包中返回jar所在文件夹,class不在jar中返回文件夹目录 jdk中的类不能使用此方法
      Parameters:
      clazz - 类
      Returns:
      URL
    • getLocationPath

      public static String getLocationPath(Class<?> clazz)
      获取class类路径, 不管是否在jar包中都会返回文件夹的路径 class在jar包中返回jar所在文件夹,class不在jar中返回文件夹目录 jdk中的类不能使用此方法
      Parameters:
      clazz - 类
      Returns:
      class路径
    • isAbstractOrInterface

      public static boolean isAbstractOrInterface(Class<?> clazz)
      是否为抽象类或接口
      Parameters:
      clazz - 类
      Returns:
      是否为抽象类或接口
    • isJdkClass

      public static boolean isJdkClass(Class<?> clazz)
      是否为JDK中定义的类或接口,判断依据:
       1、以java.、javax.开头的包名
       2、ClassLoader为null
       
      Parameters:
      clazz - 被检查的类
      Returns:
      是否为JDK中定义的类或接口
    • isInterface

      public static boolean isInterface(Class<?> clazz)
      是否为接口
      Parameters:
      clazz - 类
      Returns:
      是否为接口