Java:如何解析通配类型的lambda参数?

前端之家收集整理的这篇文章主要介绍了Java:如何解析通配类型的lambda参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
那我们有FunctionalInterface:
public interface Consumer<T> {

    void accept(T t);

}

我可以使用它:

.handle(Integer p -> System.out.println(p * 2));

我们如何在代码中解析该lambda参数的实际通用类型?

当我们将其用作内联实现时,从该类的方法提取整数并不困难.

我想念什么吗?或者只是java不支持lambda类?

要更清洁:

该lambda用MethodInvoker(在所述的句柄中)包装,在其执行(Message<?>消息)中提取实际参数以进行进一步的反射方法调用.之前,它使用Spring的ConversionService将提供的参数转换为目标参数.

在这种情况下,方法句柄是实际应用程序工作之前的一些配置程序.

不同的问题,但是对于同样的问题的解决方案的预期:Java: get actual type of generic method with lambda parameter

解决方法

我最近添加解决lambda类型参数到 TypeTools支持.例如:
MapFunction<String,Integer> fn = str -> Integer.valueOf(str);
Class<?>[] typeArgs = TypeResolver.resolveRawArguments(MapFunction.class,fn.getClass());

解决的类型参数如预期的那样:

assert typeArgs[0] == String.class;
assert typeArgs[1] == Integer.class;

注意:底层实现使用了已知在Oracle JDK和OpenJDK上工作的@danielbodart概述的ConstantPool方法.

猜你在找的Java相关文章