亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

LambdaConversionException與泛型:JVM錯誤?

LambdaConversionException與泛型:JVM錯誤?

LEATH 2019-12-05 13:22:12
我有一些代碼,其中包含方法引用,可以很好地編譯并在運行時失敗。例外是:Caused by: java.lang.invoke.LambdaConversionException: Invalid receiver type class redacted.BasicEntity; not a subtype of implementation type interface redacted.HasImagesEntity    at java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:233)    at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:303)    at java.lang.invoke.CallSite.makeSite(CallSite.java:289)觸發異常的類:class ImageController<E extends BasicEntity & HasImagesEntity> {    void doTheThing(E entity) {        Set<String> filenames = entity.getImages().keySet().stream()            .map(entity::filename)            .collect(Collectors.toSet());    }}試圖解決該異常entity::filename。filename()在中聲明HasImagesEntity。據我所知,我得到了例外,因為E的擦除是BasicEntity,而JVM不會(不能?)考慮E的其他范圍。當我將方法引用重寫為瑣碎的lambda時,一切都很好。在我看來,一個結構按預期工作并在語義上等效就爆炸了。這可能在規格中嗎?我正在努力尋找一種方法,以使其在編譯器或運行時中不成為問題,并且沒有提出任何建議。
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

我剛剛在JDK9和JDK8u45中修復了此問題??吹竭@個錯誤。更改將需要一些時間才能滲透到升級后的版本中。Dan只是向我指出了這個StackOverflow問題,因此我要添加此注釋。發現錯誤后,請提交它們。


我通過讓編譯器創建橋來解決此問題,就像在許多復雜方法引用的情況下一樣。我們還在研究規范的含義。


查看完整回答
反對 回復 2019-12-05
  • 3 回答
  • 0 關注
  • 910 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號