在eclipse中学习java8流。发现以下行为 有一个学生对象列表,stuList。我有这样的表达。
stuList.stream().collect(Collectors.averagingDouble(p -> p.getMarks() ));
如果我写 p -> p.
然后尝试使用eclipse进行内容辅助,则不会显示任何方法。
但是,如果添加LHS, double d =
,则 p -> p.
上的内容辅助功能会显示所有可用的方法。
我希望eclipse能够理解我正在研究学生对象,即使我没有提供LHS。对于第一种情况,如果我自己编写方法,代码编译正常。只有自动完成无法正常工作
对此有何指示?为什么添加LHS允许eclipse推断类型?
使用eclipse:Mars ..
答案 0 :(得分:8)
此位置的完成需要知道p
的类型。只要代码语法正确,@ {1}}就会推断为p
,正如@Tunaki所指出的那样。但是,当你输入''时,很快就会。代码太破了,Student
上没有文字悬停。
(旁注:文本悬停和完成是由具有不同上下文信息的不同编译器调用计算的,因此它们不会总是看到完全相同的信息)。
虽然对于人类读者而言,λ体可能看起来与推断p
的类型无关,但是在不知道例如λ是否与空相容和/或价值相容的情况下,推断不能进行。 p
不是一个可以帮助回答这个问题的表达方式。
具有适当的目标类型是类型推断的重要输入,因此一般而言,添加LHS可以改善情况并不奇怪。但是,我没有现成的解释,为什么它会在这种情况下影响代码完成。
所有这些只能说明(在很高的层次上)为什么Eclipse的行为方式。改进总是可能的,即使它涉及极端复杂性,因为对不完整代码的类型推断固有地做了 - 我们要求的不仅仅是更高阶的推理:推断出几种可能的推论中哪一种可能产生最可能的结果。
开源工具的好处是:您可以通过编写良好的错误报告甚至代码贡献来帮助其持续改进。看到@ the8472引用的错误报告已经有一段时间没有回复了,我只是放弃了评论,让它们回到了雷达上。用户应该在适当的时间间隔内对错误报告中的团队进行ping操作,社区需求与设置优先级相关。 lambda机构内部的代码完成是团队议程中的热门话题。