2015-10-23 22 views
8

eclipseでjava8ストリームを学習していました。以下の動作が見つかりました 学生オブジェクトのリスト、stuListがあります。私はこのような表現をしています。Eclipse Java 8ラムダ式の自動補完

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

私はp -> p.を書き込み、コンテンツが日食を支援しようとすると、何の方法が示されていません。 しかし、その後p -> p.上のコンテンツを助けるん、LHS、double d =を追加した場合は、すべてのメソッドが利用可能を示しています。

私はLHSを提供していなくても、学生オブジェクトに取り組んでいることを日食が理解することを期待しています。最初のケースでは、自分でメソッドを記述すると、コードはうまくコンパイルされます。オートコンプリートのみが動作しません

これにはどのような指針がありますか?そして、なぜLHSを追加すると、eclipseは型を推論できますか?

使用日食:火星..この位置で

+2

ああ、私はその日を楽しみにしています.Eclipseは型の推論を正しく、完全なコードのために取得します。* then *不完全なコードの推論で悩まされるかもしれません。 – Holger

+2

eclipseはその自動補完にバグを持っています。特に長い/複雑なコードブロックでは、それは単にある時点で救済されるようです。例えばhttps://bugs.eclipse.org/bugs/show_bug.cgi?id=463476またはhttps://bugs.eclipse。org/bugs/show_bug.cgi?id = 462015 – the8472

+2

Eclipseは 'p'が' Student'の型になっていることを検出しますが(あなたがマウスを動かすと)、コンテンツアシストは間違っています... – Tunaki

答えて

7

完了はpのタイプが知られていることを必要とします。コードがである限り、構文的に正しいpは@Tunakiによって指摘されているようにStudentに推測されます。しかしすぐに、あなたが '。'コードはちょうど壊れていて、pにはテキストが表示されません。 (サイド・ノート:テキスト・ホバーと補完は、異なるコンテキスト情報を持つ異なるコンパイラー呼び出しによって計算されるので、常に同じ情報を正確に見るとは限りません)。人間の読者にラムダ本体がpの種類を推定するよう無関係見えるかもしれないが

、推論は、ラムダがボイド互換および/または価値の互換性があるかどうか、例えば、知らなくても進行することができません。 p.はこの質問に答えるのに役立つ式ではありません。

適切なターゲットタイプを持つことは、型推論の重要なインプットです。したがって、一般的に言えば、LHSを追加すると状況が改善されます。私は準備ができていませんが、このケースではなぜコード補完に影響を与えるのでしょうか。

これらはすべて、Eclipseがなぜ動作するのかを(非常に高いレベルで)説明する必要があります。不完全なコードの型推論が本質的にそうであるように極端な複雑さを伴う場合であっても、改善は常に可能である - 我々は、より高い次の推論を要求している:いくつかの可能な推論のどれが最も可能性の高い結果をもたらすかを推測する。

オープンソースツールの良い点は、書かれたバグレポートやコードの貢献によっても、継続的な改善が得られることです。 @ the8472が言及していないバグレポートを見ているうちに、私はちょうど彼らをレーダーに戻すコメントを書き留めました。ユーザーは適切な間隔でバグレポートをチームにpingすることができます。コミュニティの要求は優先順位を設定するのに適しています。ラムダボディ内でのコード補完は、チームのアジェンダに関するホットトピックです。