From 922d460fbea16f7f094f06a6d3ee603a6ee47813 Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Sat, 18 Jun 2022 22:32:49 +0800 Subject: [PATCH] =?UTF-8?q?LambdaUtil=E5=85=A5=E5=8F=82=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E6=B3=9B=E5=9E=8B=EF=BC=8C=E8=83=BD=E9=80=9A=E8=BF=87=E5=9C=A8?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=8C=87=E5=AE=9A=E6=B3=9B=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/lang/func/LambdaUtil.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java index 7c7c5f062..d69fd6e60 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java @@ -54,11 +54,12 @@ public class LambdaUtil { * * @param func lambda * @param 类型 + * @param lambda的类型 * @return lambda实现类 * @author VampireAchao */ @SuppressWarnings("unchecked") - public static Class getRealClass(final Serializable func) { + public static Class getRealClass(final T func) { final LambdaInfo lambdaInfo = resolve(func); return (Class) Opt.of(lambdaInfo).map(LambdaInfo::getInstantiatedTypes).filter(types -> types.length != 0).map(types -> types[types.length - 1]).orElseGet(lambdaInfo::getClazz); } @@ -68,9 +69,10 @@ public class LambdaUtil { * 该缓存可能会在任意不定的时间被清除 * * @param func 需要解析的 lambda 对象(无参方法) + * @param lambda的类型 * @return 返回解析后的结果 */ - public static LambdaInfo resolve(final Serializable func) { + public static LambdaInfo resolve(final T func) { return CACHE.computeIfAbsent(func.getClass().getName(), (key) -> { final SerializedLambda serializedLambda = _resolve(func); final String methodName = serializedLambda.getImplMethodName(); @@ -104,9 +106,10 @@ public class LambdaUtil { * 获取lambda表达式函数(方法)名称 * * @param func 函数(无参方法) + * @param lambda的类型 * @return 函数名称 */ - public static String getMethodName(final Serializable func) { + public static String getMethodName(final T func) { return resolve(func).getName(); } @@ -120,11 +123,12 @@ public class LambdaUtil { * * * @param func 函数 + * @param lambda的类型 * @return 方法名称 * @throws IllegalArgumentException 非Getter或Setter方法 * @since 5.7.23 */ - public static String getFieldName(final Serializable func) throws IllegalArgumentException { + public static String getFieldName(final T func) throws IllegalArgumentException { return BeanUtil.getFieldName(getMethodName(func)); } @@ -139,9 +143,10 @@ public class LambdaUtil { *

* * @param func 需要解析的 lambda 对象 + * @param lambda的类型 * @return 返回解析后的结果 */ - private static SerializedLambda _resolve(final Serializable func) { + private static SerializedLambda _resolve(final T func) { if (func instanceof SerializedLambda) { return (SerializedLambda) func; }