Java 8 个通用的 LambdaMetafactory?

Java 8 generic LambdaMetafactory?

转换时 from concrete format to generic format I found another limitation :

To issue a complete symbolic type descriptor, the compiler must also determine the return type. This is based on a cast on the method invocation expression, if there is one, or else Object if the invocation is an expression or else void if the invocation is a statement.

我很好奇有没有办法overcome this?

更新Working Example per Holger

如果您的编译时调用签名与您传递给 LambdaMetafactoryinvokedType 参数不匹配,您可以使用 invoke 而不是 invokeExact。它将执行所需的转换。

对于 lambda 实例方法的实际调用,没有性能损失。在返回封装 MethodHandleCallSite 之前,LambdaMetafactory 决定生成的 lambda 将如何工作。因此,您调用它来构建 lambda 实例的方式不会影响结果。