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
如果您的编译时调用签名与您传递给 LambdaMetafactory
的 invokedType
参数不匹配,您可以使用 invoke
而不是 invokeExact
。它将执行所需的转换。
对于 lambda 实例方法的实际调用,没有性能损失。在返回封装 MethodHandle
的 CallSite
之前,LambdaMetafactory
决定生成的 lambda 将如何工作。因此,您调用它来构建 lambda 实例的方式不会影响结果。
转换时
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
如果您的编译时调用签名与您传递给 LambdaMetafactory
的 invokedType
参数不匹配,您可以使用 invoke
而不是 invokeExact
。它将执行所需的转换。
对于 lambda 实例方法的实际调用,没有性能损失。在返回封装 MethodHandle
的 CallSite
之前,LambdaMetafactory
决定生成的 lambda 将如何工作。因此,您调用它来构建 lambda 实例的方式不会影响结果。