From 8e5ad32e7028b6528917c0c8088993c328fe3bbc Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 25 Aug 2021 15:25:25 +0800 Subject: [PATCH] add method --- .../cn/hutool/core/lang/func/LambdaUtil.java | 31 +++++++++++++++++-- .../hutool/core/lang/func/LambdaUtilTest.java | 6 ++++ 2 files changed, 35 insertions(+), 2 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 54241928f..02db6a2e1 100644 --- 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 @@ -2,6 +2,7 @@ package cn.hutool.core.lang.func; import cn.hutool.core.lang.SimpleCache; import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; import java.io.Serializable; import java.lang.invoke.SerializedLambda; @@ -20,7 +21,7 @@ public class LambdaUtil { * 解析lambda表达式,加了缓存。 * 该缓存可能会在任意不定的时间被清除 * - * @param Lambda类型 + * @param Lambda类型 * @param func 需要解析的 lambda 对象(无参方法) * @return 返回解析后的结果 */ @@ -31,7 +32,7 @@ public class LambdaUtil { /** * 获取lambda表达式函数(方法)名称 * - * @param Lambda类型 + * @param Lambda类型 * @param func 函数(无参方法) * @return 函数名称 */ @@ -39,6 +40,32 @@ public class LambdaUtil { return resolve(func).getImplMethodName(); } + /** + * 获取lambda表达式Getter或Setter函数(方法)对应的字段名称,规则如下: + *
    + *
  • getXxxx获取为xxxx,如getName得到name。
  • + *
  • setXxxx获取为xxxx,如setName得到name。
  • + *
  • isXxxx获取为xxxx,如isName得到name。
  • + *
  • 其它不满足规则的方法名抛出{@link IllegalArgumentException}
  • + *
+ * + * @param Lambda类型 + * @param func 函数(无参方法) + * @return 函数名称 + * @throws IllegalArgumentException 非Getter或Setter方法 + * @since 5.7.10 + */ + public static String getFieldName(Func1 func) throws IllegalArgumentException { + final String methodName = getMethodName(func); + if (methodName.startsWith("get") || methodName.startsWith("set")) { + return StrUtil.removePreAndLowerFirst(methodName, 3); + } else if (methodName.startsWith("is")) { + return StrUtil.removePreAndLowerFirst(methodName, 2); + } else { + throw new IllegalArgumentException("Invalid Getter or Setter name: " + methodName); + } + } + /** * 解析lambda表达式,加了缓存。 * 该缓存可能会在任意不定的时间被清除 diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaUtilTest.java index ff6f260cb..b74a30a20 100644 --- a/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaUtilTest.java @@ -12,6 +12,12 @@ public class LambdaUtilTest { Assert.assertEquals("getAge", methodName); } + @Test + public void getFieldNameTest(){ + String fieldName = LambdaUtil.getFieldName(MyTeacher::getAge); + Assert.assertEquals("age", fieldName); + } + @Data static class MyTeacher{ public String age;