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
IllegalArgumentExceptionT - 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转换为FunctionT - 参数类型U - 参数2类型R - 返回值类型biFunction - BiFunctionparam - 参数Functionpublic static <T,U> Predicate<T> toPredicate(BiPredicate<T,U> biPredicate, U param)
BiPredicate转换为PredicateT - 参数类型U - 参数2类型biPredicate - BiFunctionparam - 参数Predicatepublic static <T,U> Consumer<T> toPredicate(BiConsumer<T,U> biConsumer, U param)
BiConsumer转换为ConsumerT - 参数类型U - 参数2类型biConsumer - BiConsumerparam - 参数ConsumerCopyright © 2025. All rights reserved.