Eclipse Java 8 Automatische Vervollständigung für Lambda-Ausdrücke

8

Erlernte java8 Streams in Eclipse. Fand das folgende Verhalten Habe eine Liste von Schülerobjekten, stuList. Ich habe einen solchen Ausdruck.

%Vor%

Wenn ich p -> p. schreibe und dann eine Inhaltshilfe mit Eclipse versuche, werden keine Methoden angezeigt. Aber wenn eine LHS hinzugefügt wird, double d = , dann zeigt eine Do-Inhaltshilfe für p -> p. alle verfügbaren Methoden an.

Ich erwarte, dass Eclipse versteht, dass ich an einem Schülerobjekt arbeite, selbst wenn ich keine LHS anbiete. Für den ersten Fall, wenn ich die Methode selbst schreibe, kompiliert der Code gut. Nur die automatische Vervollständigung funktioniert nicht

Irgendwelche Hinweise dafür? Und warum kann man mit LHS auf Eclipse schließen?

Mit eclipse: Mars ..

    
Shabin Hashim 23.10.2015, 14:55
quelle

1 Antwort

7

Die Fertigstellung in dieser Position erfordert, dass der Typ von p bekannt ist. Solange der Code syntaktisch korrekt ist , wird p auf Student zurückgeführt, wie von @Tunaki angegeben. Sobald Sie jedoch das '.' Der Code ist einfach zu kaputt, es erscheint kein Text-Hover auf p . (Randnotiz: Text Hover und Completion werden von verschiedenen Compiler-Aufrufen mit unterschiedlichen Kontextinformationen berechnet, so dass sie nicht immer genau dieselben Informationen sehen).

Während für den menschlichen Leser der Lambda-Körper als irrelevant erscheinen mag, um auf den Typ von p zu schließen, kann die Inferenz nicht ohne Kenntnis beispielsweise davon, ob das Lambda voidkompatibel und / oder wertkompatibel ist, erfolgen. p. ist kein Ausdruck, der diese Frage beantworten könnte.

Die Angabe eines geeigneten Zieltyps ist eine wichtige Eingabe, um Inferenzen zu typisieren. Daher sollte es im Allgemeinen nicht überraschen, dass das Hinzufügen eines LHS die Situation verbessert. Ich habe jedoch keine fertige Erklärung, warum genau dies in diesem Fall die Code-Vervollständigung beeinflusst.

All dies sollte nur (auf einer sehr hohen Ebene) veranschaulichen, warum sich Eclipse so verhält wie es tut. Verbesserungen sind immer möglich, selbst wenn es sich um eine extreme Komplexität handelt, wie es Typinferenz auf unvollständigen Code inhärent macht - wir fordern nicht weniger als eine Schlussfolgerung höherer Ordnung: ableiten, welche von mehreren möglichen Schlussfolgerungen die wahrscheinlichsten Ergebnisse liefern könnte.

Das Gute an einem Open-Source-Tool ist: Sie können bei der kontinuierlichen Verbesserung durch gut geschriebene Fehlerberichte oder sogar Code-Beiträge helfen. Als ich die Fehlerberichte sah, auf die @ the8472 einige Zeit nicht antwortete, ließ ich einen Kommentar fallen, um sie wieder auf den Radar zu bringen. Benutzer sollten sich frei fühlen, das Team in angemessenen Abständen über Fehlerberichte zu informieren, da Community-Anforderungen für die Festlegung von Prioritäten relevant sind. Code-Vervollständigung in Lambda-Körpern ist ein heißes Thema auf der Tagesordnung des Teams.

    
Stephan Herrmann 24.10.2015 12:46
quelle

Tags und Links