Class LambdaKit

java.lang.Object
org.miaixz.bus.core.xyz.LambdaKit

public class LambdaKit extends Object
Lambda相关工具类
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Details

    • LambdaKit

      public LambdaKit()
  • Method Details

    • getRealClass

      public static <R, T extends Serializable> Class<R> getRealClass(T func)
      通过对象的方法或类的静态方法引用,获取lambda实现类 传入lambda无参数但含有返回值的情况能够匹配到此方法:
      • 引用特定对象的实例方法:
        
         			MyTeacher myTeacher = new MyTeacher();
         			Class<MyTeacher> supplierClass = LambdaKit.getRealClass(myTeacher::getAge);
         			Assert.assertEquals(MyTeacher.class, supplierClass);
                    
      • 引用静态无参方法:
        
         			Class<MyTeacher> staticSupplierClass = LambdaKit.getRealClass(MyTeacher::takeAge);
         			Assert.assertEquals(MyTeacher.class, staticSupplierClass);
                    
      在以下场景无法获取到正确类型
      
       		// 枚举测试,只能获取到枚举类型
       		Class<Enum<?>> enumSupplierClass = LambdaKit.getRealClass(LambdaKit.LambdaKindEnum.REF_NONE::ordinal);
       		Assert.assertEquals(Enum.class, enumSupplierClass);
       		// 调用父类方法,只能获取到父类类型
       		Class<Entity<?>> superSupplierClass = LambdaKit.getRealClass(myTeacher::getId);
       		Assert.assertEquals(Entity.class, superSupplierClass);
       		// 引用父类静态带参方法,只能获取到父类类型
       		Class<Entity<?>> staticSuperFunctionClass = LambdaKit.getRealClass(MyTeacher::takeId);
       		Assert.assertEquals(Entity.class, staticSuperFunctionClass);
       
      Type Parameters:
      R - 类型
      T - lambda的类型
      Parameters:
      func - lambda
      Returns:
      lambda实现类
    • resolve

      public static <T extends Serializable> LambdaX resolve(T func)
      解析lambda表达式,加了缓存。 该缓存可能会在任意不定的时间被清除
      Type Parameters:
      T - lambda的类型
      Parameters:
      func - 需要解析的 lambda 对象(无参方法)
      Returns:
      返回解析后的结果
    • getMethodName

      public static <T extends Serializable> String getMethodName(T func)
      获取lambda表达式函数(方法)名称
      Type Parameters:
      T - lambda的类型
      Parameters:
      func - 函数(无参方法)
      Returns:
      函数名称
    • getFieldName

      public static <T extends Serializable> String getFieldName(T func) throws IllegalArgumentException
      获取lambda表达式Getter或Setter函数(方法)对应的字段名称,规则如下:
      • getXxxx获取为xxxx,如getName得到name。
      • setXxxx获取为xxxx,如setName得到name。
      • isXxxx获取为xxxx,如isName得到name。
      • 其它不满足规则的方法名抛出IllegalArgumentException
      Type Parameters:
      T - lambda的类型
      Parameters:
      func - 函数
      Returns:
      方法名称
      Throws:
      IllegalArgumentException - 非Getter或Setter方法
    • buildGetter

      public static <T, R> Function<T,R> buildGetter(Method getMethod)
      等效于 Obj::getXxx
      Type Parameters:
      T - 调用getter方法对象类型
      R - getter方法返回值类型
      Parameters:
      getMethod - getter方法
      Returns:
      Obj::getXxx
    • buildGetter

      public static <T, R> Function<T,R> buildGetter(Class<T> clazz, String fieldName)
      等效于 Obj::getXxx
      Type Parameters:
      T - 调用getter方法对象类型
      R - getter方法返回值类型
      Parameters:
      clazz - 调用getter方法对象类
      fieldName - 字段名称
      Returns:
      Obj::getXxx
    • buildSetter

      public static <T, P> BiConsumer<T,P> buildSetter(Method setMethod)
      等效于 Obj::setXxx
      Type Parameters:
      T - 调用setter方法对象类型
      P - setter方法返回的值类型
      Parameters:
      setMethod - setter方法
      Returns:
      Obj::setXxx
    • buildSetter

      public static <T, P> BiConsumer<T,P> buildSetter(Class<T> clazz, String fieldName)
      Obj::setXxx
      Type Parameters:
      T - 调用setter方法对象类型
      P - setter方法返回的值类型
      Parameters:
      clazz - 调用setter方法对象类
      fieldName - 字段名称
      Returns:
      Obj::setXxx
    • build

      public static <F> F build(Class<F> lambdaType, Class<?> clazz, String methodName, Class<?>... paramsTypes)
      等效于 Obj::method
      Type Parameters:
      F - 函数式接口类型
      Parameters:
      lambdaType - 接受lambda的函数式接口类型
      clazz - 调用类
      methodName - 方法名
      paramsTypes - 方法参数类型数组
      Returns:
      Obj::method
    • toFunction

      public static <T, U, R> Function<T,R> toFunction(BiFunction<T,U,R> biFunction, U param)
      通过自定义固定参数,将BiFunction转换为Function
      Type Parameters:
      T - 参数类型
      U - 参数2类型
      R - 返回值类型
      Parameters:
      biFunction - BiFunction
      param - 参数
      Returns:
      Function
    • toPredicate

      public static <T, U> Predicate<T> toPredicate(BiPredicate<T,U> biPredicate, U param)
      通过自定义固定参数,将BiPredicate转换为Predicate
      Type Parameters:
      T - 参数类型
      U - 参数2类型
      Parameters:
      biPredicate - BiFunction
      param - 参数
      Returns:
      Predicate
    • toPredicate

      public static <T, U> Consumer<T> toPredicate(BiConsumer<T,U> biConsumer, U param)
      通过自定义固定参数,将BiConsumer转换为Consumer
      Type Parameters:
      T - 参数类型
      U - 参数2类型
      Parameters:
      biConsumer - BiConsumer
      param - 参数
      Returns:
      Consumer
    • getInvokeMethod

      public static Method getInvokeMethod(Class<?> funcType)
      获取函数的执行方法
      Parameters:
      funcType - 函数接口类
      Returns:
      Method