public class LambdaUtil extends Object
Constructor and Description |
---|
LambdaUtil() |
Modifier and Type | Method and Description |
---|---|
static <F> F |
build(Class<F> lambdaType,
Class<?> clazz,
String methodName,
Class<?>... paramsTypes)
等效于 Obj::method
|
static <T,R> Function<T,R> |
buildGetter(Class<T> clazz,
String fieldName)
等效于 Obj::getXxx
|
static <T,R> Function<T,R> |
buildGetter(Method getMethod)
等效于 Obj::getXxx
|
static <T,P> BiConsumer<T,P> |
buildSetter(Class<T> clazz,
String fieldName)
Obj::setXxx
|
static <T,P> BiConsumer<T,P> |
buildSetter(Method setMethod)
等效于 Obj::setXxx
|
static <T extends Serializable> |
getFieldName(T func)
获取lambda表达式Getter或Setter函数(方法)对应的字段名称,规则如下:
getXxxx获取为xxxx,如getName得到name。
|
static Method |
getInvokeMethod(Class<?> funcType)
获取函数的执行方法
|
static <T extends Serializable> |
getMethodName(T func)
获取lambda表达式函数(方法)名称
|
static <R,T extends Serializable> |
getRealClass(T func)
通过对象的方法或类的静态方法引用,获取lambda实现类
传入lambda无参数但含有返回值的情况能够匹配到此方法:
引用特定对象的实例方法:
MyTeacher myTeacher = new MyTeacher();
Class<MyTeacher> supplierClass = LambdaUtil.getRealClass(myTeacher::getAge);
Assert.assertEquals(MyTeacher.class, supplierClass);
引用静态无参方法:
Class<MyTeacher> staticSupplierClass = LambdaUtil.getRealClass(MyTeacher::takeAge);
Assert.assertEquals(MyTeacher.class, staticSupplierClass);
在以下场景无法获取到正确类型
{@code
// 枚举测试,只能获取到枚举类型
Class |
static <T extends Serializable> |
resolve(T func)
解析lambda表达式,加了缓存。
|
static <T,U,R> Function<T,R> |
toFunction(BiFunction<T,U,R> biFunction,
U param)
通过自定义固定参数,将
BiFunction 转换为Function |
static <T,U> Consumer<T> |
toPredicate(BiConsumer<T,U> biConsumer,
U param)
通过自定义固定参数,将
BiConsumer 转换为Consumer |
static <T,U> Predicate<T> |
toPredicate(BiPredicate<T,U> biPredicate,
U param)
通过自定义固定参数,将
BiPredicate 转换为Predicate |
public static <R,T extends Serializable> Class<R> getRealClass(T func)
MyTeacher myTeacher = new MyTeacher();
Class<MyTeacher> supplierClass = LambdaUtil.getRealClass(myTeacher::getAge);
Assert.assertEquals(MyTeacher.class, supplierClass);
Class<MyTeacher> staticSupplierClass = LambdaUtil.getRealClass(MyTeacher::takeAge);
Assert.assertEquals(MyTeacher.class, staticSupplierClass);
// 枚举测试,只能获取到枚举类型
Class<Enum<?>> enumSupplierClass = LambdaUtil.getRealClass(LambdaUtil.LambdaKindEnum.REF_NONE::ordinal);
Assert.assertEquals(Enum.class, enumSupplierClass);
// 调用父类方法,只能获取到父类类型
Class<Entity<?>> superSupplierClass = LambdaUtil.getRealClass(myTeacher::getId);
Assert.assertEquals(Entity.class, superSupplierClass);
// 引用父类静态带参方法,只能获取到父类类型
Class<Entity<?>> staticSuperFunctionClass = LambdaUtil.getRealClass(MyTeacher::takeId);
Assert.assertEquals(Entity.class, staticSuperFunctionClass);
R
- 类型T
- lambda的类型func
- lambdapublic static <T extends Serializable> LambdaInfo resolve(T func)
T
- lambda的类型func
- 需要解析的 lambda 对象(无参方法)public static <T extends Serializable> String getMethodName(T func)
T
- lambda的类型func
- 函数(无参方法)public static <T extends Serializable> String getFieldName(T func) throws IllegalArgumentException
IllegalArgumentException
T
- lambda的类型func
- 函数IllegalArgumentException
- 非Getter或Setter方法public static <T,R> Function<T,R> buildGetter(Method getMethod)
T
- 调用getter方法对象类型R
- getter方法返回值类型getMethod
- getter方法public static <T,R> Function<T,R> buildGetter(Class<T> clazz, String fieldName)
T
- 调用getter方法对象类型R
- getter方法返回值类型clazz
- 调用getter方法对象类fieldName
- 字段名称public static <T,P> BiConsumer<T,P> buildSetter(Method setMethod)
T
- 调用setter方法对象类型P
- setter方法返回的值类型setMethod
- setter方法public static <T,P> BiConsumer<T,P> buildSetter(Class<T> clazz, String fieldName)
T
- 调用setter方法对象类型P
- setter方法返回的值类型clazz
- 调用setter方法对象类fieldName
- 字段名称public static <F> F build(Class<F> lambdaType, Class<?> clazz, String methodName, Class<?>... paramsTypes)
F
- 函数式接口类型lambdaType
- 接受lambda的函数式接口类型clazz
- 调用类methodName
- 方法名paramsTypes
- 方法参数类型数组public static <T,U,R> Function<T,R> toFunction(BiFunction<T,U,R> biFunction, U param)
BiFunction
转换为Function
T
- 参数类型U
- 参数2类型R
- 返回值类型biFunction
- BiFunction
param
- 参数Function
public static <T,U> Predicate<T> toPredicate(BiPredicate<T,U> biPredicate, U param)
BiPredicate
转换为Predicate
T
- 参数类型U
- 参数2类型biPredicate
- BiFunction
param
- 参数Predicate
public static <T,U> Consumer<T> toPredicate(BiConsumer<T,U> biConsumer, U param)
BiConsumer
转换为Consumer
T
- 参数类型U
- 参数2类型biConsumer
- BiConsumer
param
- 参数Consumer
Copyright © 2025. All rights reserved.