!659 LambdaUtil入参改为泛型,能通过在方法指定泛型

Merge pull request !659 from 阿超/v6-dev
This commit is contained in:
Looly 2022-06-18 15:18:55 +00:00 committed by Gitee
commit 76fa10ec74
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F

View File

@ -54,11 +54,12 @@ public class LambdaUtil {
* *
* @param func lambda * @param func lambda
* @param <R> 类型 * @param <R> 类型
* @param <T> lambda的类型
* @return lambda实现类 * @return lambda实现类
* @author VampireAchao * @author VampireAchao
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static <R> Class<R> getRealClass(final Serializable func) { public static <R, T extends Serializable> Class<R> getRealClass(final T func) {
final LambdaInfo lambdaInfo = resolve(func); final LambdaInfo lambdaInfo = resolve(func);
return (Class<R>) Opt.of(lambdaInfo).map(LambdaInfo::getInstantiatedTypes).filter(types -> types.length != 0).map(types -> types[types.length - 1]).orElseGet(lambdaInfo::getClazz); return (Class<R>) 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 func 需要解析的 lambda 对象无参方法
* @param <T> lambda的类型
* @return 返回解析后的结果 * @return 返回解析后的结果
*/ */
public static LambdaInfo resolve(final Serializable func) { public static <T extends Serializable> LambdaInfo resolve(final T func) {
return CACHE.computeIfAbsent(func.getClass().getName(), (key) -> { return CACHE.computeIfAbsent(func.getClass().getName(), (key) -> {
final SerializedLambda serializedLambda = _resolve(func); final SerializedLambda serializedLambda = _resolve(func);
final String methodName = serializedLambda.getImplMethodName(); final String methodName = serializedLambda.getImplMethodName();
@ -104,9 +106,10 @@ public class LambdaUtil {
* 获取lambda表达式函数方法名称 * 获取lambda表达式函数方法名称
* *
* @param func 函数无参方法 * @param func 函数无参方法
* @param <T> lambda的类型
* @return 函数名称 * @return 函数名称
*/ */
public static String getMethodName(final Serializable func) { public static <T extends Serializable> String getMethodName(final T func) {
return resolve(func).getName(); return resolve(func).getName();
} }
@ -120,11 +123,12 @@ public class LambdaUtil {
* </ul> * </ul>
* *
* @param func 函数 * @param func 函数
* @param <T> lambda的类型
* @return 方法名称 * @return 方法名称
* @throws IllegalArgumentException 非Getter或Setter方法 * @throws IllegalArgumentException 非Getter或Setter方法
* @since 5.7.23 * @since 5.7.23
*/ */
public static String getFieldName(final Serializable func) throws IllegalArgumentException { public static <T extends Serializable> String getFieldName(final T func) throws IllegalArgumentException {
return BeanUtil.getFieldName(getMethodName(func)); return BeanUtil.getFieldName(getMethodName(func));
} }
@ -139,9 +143,10 @@ public class LambdaUtil {
* </p> * </p>
* *
* @param func 需要解析的 lambda 对象 * @param func 需要解析的 lambda 对象
* @param <T> lambda的类型
* @return 返回解析后的结果 * @return 返回解析后的结果
*/ */
private static SerializedLambda _resolve(final Serializable func) { private static <T extends Serializable> SerializedLambda _resolve(final T func) {
if (func instanceof SerializedLambda) { if (func instanceof SerializedLambda) {
return (SerializedLambda) func; return (SerializedLambda) func;
} }