public class LambdaUtil extends Object
| Constructor and Description |
|---|
LambdaUtil() |
| Modifier and Type | Method and Description |
|---|---|
static <T> String |
getFieldName(Func0<T> func)
获取lambda表达式Getter或Setter函数(方法)对应的字段名称,规则如下:
getXxxx获取为xxxx,如getName得到name。
|
static <T> String |
getFieldName(Func1<T,?> func)
获取lambda表达式Getter或Setter函数(方法)对应的字段名称,规则如下:
getXxxx获取为xxxx,如getName得到name。
|
static <R> String |
getMethodName(Func0<R> func)
获取lambda表达式函数(方法)名称
|
static <P> String |
getMethodName(Func1<P,?> func)
获取lambda表达式函数(方法)名称
|
static <R> Class<R> |
getRealClass(Func0<?> func)
通过对象的方法或类的静态方法引用,获取lambda实现类
传入lambda无参数但含有返回值的情况能够匹配到此方法:
引用特定对象的实例方法:
MyTeacher myTeacher = new MyTeacher();
Class<MyTeacher> supplierClass = LambdaUtil.getRealClass(myTeacher::getAge);
assertEquals(MyTeacher.class, supplierClass);
引用静态无参方法:
Class<MyTeacher> staticSupplierClass = LambdaUtil.getRealClass(MyTeacher::takeAge);
assertEquals(MyTeacher.class, staticSupplierClass);
在以下场景无法获取到正确类型
{@code
// 枚举测试,只能获取到枚举类型
Class |
static <P,R> Class<P> |
getRealClass(Func1<P,R> func)
通过对象的方法或类的静态方法引用,然后根据
SerializedLambda.getInstantiatedMethodType()获取lambda实现类传入lambda有参数且含有返回值的情况能够匹配到此方法: 引用特定类型的任意对象的实例方法:
Class<MyTeacher> functionClass = LambdaUtil.getRealClass(MyTeacher::getAge);
assertEquals(MyTeacher.class, functionClass);
引用静态带参方法:
Class<MyTeacher> staticFunctionClass = LambdaUtil.getRealClass(MyTeacher::takeAgeBy);
assertEquals(MyTeacher.class, staticFunctionClass);
|
static <R> SerializedLambda |
resolve(Func0<R> func)
解析lambda表达式,加了缓存。
|
static <T> SerializedLambda |
resolve(Func1<T,?> func)
解析lambda表达式,加了缓存。
|
public static <R> Class<R> getRealClass(Func0<?> func)
MyTeacher myTeacher = new MyTeacher();
Class<MyTeacher> supplierClass = LambdaUtil.getRealClass(myTeacher::getAge);
assertEquals(MyTeacher.class, supplierClass);
Class<MyTeacher> staticSupplierClass = LambdaUtil.getRealClass(MyTeacher::takeAge);
assertEquals(MyTeacher.class, staticSupplierClass);
// 枚举测试,只能获取到枚举类型
Class<Enum<?>> enumSupplierClass = LambdaUtil.getRealClass(LambdaUtil.LambdaKindEnum.REF_NONE::ordinal);
assertEquals(Enum.class, enumSupplierClass);
// 调用父类方法,只能获取到父类类型
Class<Entity<?>> superSupplierClass = LambdaUtil.getRealClass(myTeacher::getId);
assertEquals(Entity.class, superSupplierClass);
// 引用父类静态带参方法,只能获取到父类类型
Class<Entity<?>> staticSuperFunctionClass = LambdaUtil.getRealClass(MyTeacher::takeId);
assertEquals(Entity.class, staticSuperFunctionClass);
R - 类型func - lambdaIllegalArgumentException - 如果是不支持的方法引用,抛出该异常,见checkLambdaTypeCanGetClass(int)public static <T> SerializedLambda resolve(Func1<T,?> func)
T - Lambda类型func - 需要解析的 lambda 对象(无参方法)public static <R> SerializedLambda resolve(Func0<R> func)
R - Lambda返回类型func - 需要解析的 lambda 对象(无参方法)public static <P> String getMethodName(Func1<P,?> func)
P - Lambda参数类型func - 函数(无参方法)public static <R> String getMethodName(Func0<R> func)
R - Lambda返回类型func - 函数(无参方法)public static <P,R> Class<P> getRealClass(Func1<P,R> func)
SerializedLambda.getInstantiatedMethodType()获取lambda实现类
Class<MyTeacher> functionClass = LambdaUtil.getRealClass(MyTeacher::getAge);
assertEquals(MyTeacher.class, functionClass);
Class<MyTeacher> staticFunctionClass = LambdaUtil.getRealClass(MyTeacher::takeAgeBy);
assertEquals(MyTeacher.class, staticFunctionClass);
P - 方法调用方类型R - 返回值类型func - lambdaIllegalArgumentException - 如果是不支持的方法引用,抛出该异常,见checkLambdaTypeCanGetClass(int)public static <T> String getFieldName(Func1<T,?> func) throws IllegalArgumentException
IllegalArgumentExceptionT - Lambda类型func - 函数(无参方法)IllegalArgumentException - 非Getter或Setter方法public static <T> String getFieldName(Func0<T> func) throws IllegalArgumentException
IllegalArgumentExceptionT - Lambda类型func - 函数(无参方法)IllegalArgumentException - 非Getter或Setter方法Copyright © 2025. All rights reserved.