将Java 8 access private member with lambda?从concrete format转换为generic format时,我找到了another limitation:
要发出完整的符号类型描述符,编译器也必须 确定返回类型。这是基于该方法的强制转换 调用表达式,如果有,或者如果是,则为Object 如果调用是a,则调用是表达式,否则为void 言。
我很好奇是否有办法overcome this?
答案 0 :(得分:4)
如果编译时调用签名与传递给invoke
的{{1}}参数不匹配,则可以使用invokeExact
而不是invokedType
。它将执行所需的转换。
对lambda实例方法的实际调用没有性能损失。在返回LambdaMetafactory
封装LambdaMetafactory
之前,CallSite
决定生成的lambda如何工作。因此,调用它来构造lambda实例的方式不会影响结果。