gpt4 book ai didi

java - Lambda 表达式的 Eclipse Java 8 自动完成

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:31 27 4
gpt4 key购买 nike

正在学习 eclipse 中的 java8 流。发现以下行为有一个学生对象列表,stuList。我有这样的表情。

stuList.stream().collect(Collectors.averagingDouble(p -> p.getMarks() ));

如果我写 p -> p. 然后尝试使用 Eclipse 进行内容辅助,未显示任何方法。但是如果添加一个 LHS , double d = ,然后在 p -> p. 上做内容辅助 显示所有可用的方法。

我希望 eclipse 理解我正在处理一个学生对象,即使我不提供 LHS。对于第一种情况,如果我自己编写方法,代码编译得很好。只有自动完成不起作用

有什么建议吗?为什么添加 LHS 允许 eclipse 推断类型?

使用 eclipse :火星..

最佳答案

此位置的完成需要知道 p 的类型。只要代码语法正确p 就会被推断为Student,如@Tunaki 所指出的。但是,一旦您输入“.”,代码太破烂了,p 上没有出现文本悬停。(旁注:文本悬停和完成是由具有不同上下文信息的不同编译器调用计算得出的,因此它们不会总是看到完全相同的信息)。

虽然对于人类读者来说,lambda 主体可能看起来与推断 p 的类型无关,但在不知道 lambda 是否兼容和/或值兼容的情况下无法进行推理. p. 不是可以帮助回答这个问题的表达式。

拥有合适的目标类型是类型推断的重要输入,因此一般来说,添加 LHS 可以改善这种情况不足为奇。不过,我没有现成的解释,为什么在这种情况下它会影响代码完成。

所有这些只能说明(在非常高的层次上)为什么 Eclipse 会以它的方式运行。改进始终是可能的,即使它涉及极端的复杂性,因为不完整代码的类型推断本身就是如此 - 我们要求不少于高阶推理:推断几种可能的推理中的哪一种可能产生最可能的结果。

开源工具的好处在于:您可以通过精心编写的错误报告甚至代码贡献来帮助其持续改进。看到 @the8472 引用的错误报告有一段时间没有得到答复,我只是发表了评论,让他们重新受到关注。用户应该随时在适当的时间间隔内向团队发送错误报告,社区需求与设置优先级相关。 lambda 体内的代码完成是团队议程上的一个热门话题。

关于java - Lambda 表达式的 Eclipse Java 8 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com