Eclipse中链式调用Optional::orElseThrow后丢失Open Declaration功能
问题原因分析
这是Eclipse JDT(Java开发工具)在类型推断逻辑上的已知bug,你使用的4.23.0版本对Optional.orElseThrow方法引用形式的返回类型推断出现异常,导致后续链式调用的方法无法正确关联到对应的类声明。
具体细节:
- 用
orElseThrow(RuntimeException::new)这种方法引用时,JDT没能正确推断出orElseThrow返回的是Optional包裹的B类型对象,后续的.getC()失去了明确的类型绑定,因此Open Declaration功能找不到对应的方法定义,弹出无法打开编辑器的提示。 - 换成Lambda表达式
() -> new RuntimeException()时,JDT的类型推断逻辑能正常识别orElseThrow的返回类型是B,后续方法跳转功能自然恢复正常。 - Integer类的类似场景能正常工作,是因为Integer相关方法的返回类型更简单明确,JDT对基础类型+方法引用的类型推断逻辑没有触发这个bug,或者说该场景下的类型推断路径不存在漏洞。
这个bug属于Eclipse JDT在泛型链式调用+方法引用组合场景下的类型推断漏洞,后续更新的Eclipse版本(比如4.24及以后)大概率已经修复了该问题,你可以尝试升级IDE版本解决。
内容的提问来源于stack exchange,提问作者C7K
相关产品推荐
相关产品推荐

