新增LambdaUtil#getImplClass方法

This commit is contained in:
VampireAchao 2022-03-23 19:01:45 +08:00
parent d1122bd3c5
commit 2087ef8be7
2 changed files with 30 additions and 8 deletions

View File

@ -1,12 +1,14 @@
package cn.hutool.core.lang.func; package cn.hutool.core.lang.func;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.SimpleCache;
import cn.hutool.core.util.ReflectUtil;
import java.io.Serializable; import java.io.Serializable;
import java.lang.invoke.SerializedLambda; import java.lang.invoke.SerializedLambda;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.SimpleCache;
import cn.hutool.core.text.CharPool;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.ReflectUtil;
/** /**
* Lambda相关工具类 * Lambda相关工具类
* *
@ -53,6 +55,10 @@ public class LambdaUtil {
return resolve(func).getImplMethodName(); return resolve(func).getImplMethodName();
} }
public static <P> Class<P> getImplClass(Func1<P, ?> func) {
return ClassUtil.loadClass(resolve(func).getImplClass().replace(CharPool.SLASH, CharPool.DOT));
}
/** /**
* 获取lambda表达式函数方法名称 * 获取lambda表达式函数方法名称
* *
@ -65,6 +71,10 @@ public class LambdaUtil {
return resolve(func).getImplMethodName(); return resolve(func).getImplMethodName();
} }
public static <R> Class<R> getImplClass(Func0<?> func) {
return ClassUtil.loadClass(resolve(func).getImplClass().replace(CharPool.SLASH, CharPool.DOT));
}
/** /**
* 获取lambda表达式Getter或Setter函数方法对应的字段名称规则如下 * 获取lambda表达式Getter或Setter函数方法对应的字段名称规则如下
* <ul> * <ul>

View File

@ -1,25 +1,37 @@
package cn.hutool.core.lang.func; package cn.hutool.core.lang.func;
import lombok.Data;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import lombok.Data;
public class LambdaUtilTest { public class LambdaUtilTest {
@Test @Test
public void getMethodNameTest(){ public void getMethodNameTest() {
String methodName = LambdaUtil.getMethodName(MyTeacher::getAge); String methodName = LambdaUtil.getMethodName(MyTeacher::getAge);
Assert.assertEquals("getAge", methodName); Assert.assertEquals("getAge", methodName);
} }
@Test @Test
public void getFieldNameTest(){ public void getFieldNameTest() {
String fieldName = LambdaUtil.getFieldName(MyTeacher::getAge); String fieldName = LambdaUtil.getFieldName(MyTeacher::getAge);
Assert.assertEquals("age", fieldName); Assert.assertEquals("age", fieldName);
} }
@Test
public void getImplClassTest() {
Class<MyTeacher> aClass = LambdaUtil.getImplClass(MyTeacher::getAge);
Assert.assertEquals(MyTeacher.class, aClass);
MyTeacher myTeacher = new MyTeacher();
Class<MyTeacher> bClass = LambdaUtil.getImplClass(myTeacher::getAge);
Assert.assertEquals(MyTeacher.class, bClass);
}
@Data @Data
static class MyTeacher{ static class MyTeacher {
public String age; public String age;
} }
} }