实现效果
通过传入一个lambda表达式获取这个字段的属性名
得到的结果:name
实现方式:定义一个Function类型的接口实现序列化
代码如下:
package com.soecode.lyf.demo.test.java8.reflect;
import java.beans.Introspector;
import java.io.Serializable;
import java.lang.invoke.SerializedLambda;
import java.lang.reflect.Method;
import java.util.function.Function;
@FunctionalInterface
public interface TypeFunction<T, R> extends Serializable, Function<T, R> {
/**
* 获取列名称
* @param lambda
* @return String
*/
static String getLambdaColumnName(Serializable lambda) {
try {
Method method = lambda.getClass().getDeclaredMethod("writeReplace");
method.setAccessible(Boolean.TRUE);
SerializedLambda serializedLambda = (SerializedLambda) method.invoke(lambda);
String getter = serializedLambda.getImplMethodName();
String fieldName = Introspector.decapitalize(getter.replace("get", ""));
return fieldName;
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
}
}
测试结果如下:
得到name的属性。
参考于我们项目中的实现,在此做个记录