eclipse-neon

___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ qstntxt ___

Ich habe mit dem neuen Eclipse Neon gearbeitet und einige meiner Codes haben mir sofort Fehler gemacht.
Das war mir zunächst seltsam, aber dann fand ich hier , dass der Neon ECJ (Eclipse Java Compiler) übernimmt die Einstellung des frühen Release-Compilers JDK 9.
Ich stoße nicht auf das gleiche Problem wie in diesem Link, sondern auf ein anderes, das ich hier erklären werde.

Geben Sie mit Lambda Expression-Deklarationen als Felder

aus

Hier ist eine Testklasse, die mir einen Kompilierungsfehler in Eclipse Neon , dem JDK 9 Compiler und dem JDK 8 Compiler (nicht früheren Versionen von Eclipse) liefert. .

%Vor%

Angesichts des obigen Codes sind die Fehler in Zeile 4 für %code% wie folgt:

%Vor%

Sehen Sie jetzt, was mit derselben Klasse passiert, wenn ich die %code% -Felddeklaration vor die %code% -Deklaration verschiebe.

%Vor%

Mit dem obigen Code sind die Fehler in Zeile 6 für %code% wie folgt:

%Vor%

Sollte sich Java 9 so verhalten?

Das hat in JDK 8 perfekt funktioniert; scheint wie eine seltsame Sache, um plötzlich durchzusetzen. Vor allem, wenn bereits Prüfungen zur Kompilierungszeit durchgeführt wurden, um sicherzustellen, dass die endgültigen Felder korrekt instanziiert werden.
Daher würde zu dem Zeitpunkt, an dem auf die Funktion %code% zugegriffen wird, ein Wert für %code% sein ( %code% oder sonst ist eine andere Geschichte) .

Ich werde auch bemerken, dass ich den folgenden Code ausprobiert habe, der mit JDK9 und ECJ gut kompiliert:

%Vor%

Es scheint, dass in JDK 9 ein großer Unterschied zwischen anonymen Klassendeklarationen und Lambda-Ausdrücken besteht. In diesem Fall, in dem wir einen Compilerfehler erhalten, imitiert der ECJ den JDK 9 Compiler genau.

Problem mit Stream & amp; Generika

Dieser hat mich wirklich überrascht, weil ich mir nicht vorstellen kann, warum der Compiler das anders interpretieren würde, als was der Generic im Code anzeigt:

%Vor%

Dieser Code enthält folgende Fehler:

%Vor%

Angesichts dieser Informationen erscheint es in diesem Fall, dass der EuGH daran schuld ist, dass er das JDK 9 nicht richtig nachgeahmt hat und nur ein Eclipse Bug ist.

    
___ tag123java9 ___ Verwenden Sie dieses Tag für spezielle Fragen zu Java 9, Version 9 der Java-Plattform, die am 21. September 2017 veröffentlicht wurde. In den meisten Fällen sollten Sie auch das Java-Tag angeben. ___ answer42168888 ___

Erstens, wenn Sie den von Ihnen verlinkten Fehlerbericht lesen, übernimmt ECJ nicht die "Einstellung" des JDK 9-Compilers. Beide Compiler hatten einen Bug, von denen einer in JDK 9, der andere in Neon behoben ist.

Das Lambda-Feld kann für mich sowohl in Eclipse Mars als auch in Java 8 nicht kompiliert werden. Und es macht durchaus Sinn, da es potentiell die Unveränderlichkeitsgarantie der letzten Felder verletzt. Überraschend ist, dass die anonyme Unterklasse erfolgreich kompiliert wird. Betrachten Sie dieses Beispiel:

%Vor%

Ich vermute, dass das obige ein Fehler in beiden Compilern sein könnte.

Wie bei dem Stream-Fehler wird auch in Java 8 der gleiche Code kompiliert. Es ist wahrscheinlich nur ein weiterer ECJ-Bug, der nichts mit Java 9 zu tun hat.

Möglicherweise verwandt:

___ tag123ecj ___ Eclipse hat einen eigenen Compiler namens Eclipse Compiler für Java (ECJ) implementiert. Dieses Tag steht für Fragen zum Verhalten dieses Compilers. ___ tag123eclipse ___ Eclipse ist eine Open-Source-IDE und Plattform zum Erstellen von Anwendungen. Es gibt eine Vielzahl von Plugins für verschiedene Programmiersprachen und andere entwicklungsorientierte Werkzeuge (wie Modellierung, Datenbanksuche usw.). Dieses Tag sollte nur für Fragen verwendet werden, die sich speziell mit der Eclipse-IDE oder der Eclipse-Plattform befassen, nicht jedoch für generalisierte (Java, Android usw.) Programmierthemen. ___ tag123eclipsneon ___ Neon ist der Codename für Eclipse 4.6, der am 22. Juni 2016 veröffentlicht wurde. Verwenden Sie dieses Tag für Fragen, die für diese Eclipse-Version spezifisch sind. In den meisten Fällen sollten Sie auch das Eclipse-Tag angeben. Beachten Sie, dass Eclipse Neon Java 8 zum Ausführen benötigt. Neon.1, Neon.2 und Neon.3 sind die Codenamen für die Fixversionen 4.6.1, 4.6.2 und 4.6.3. ___ qstnhdr ___ Sollte JDK 9 die Instanziierung von Lambda-Ausdrücken nicht zulassen, wenn letzte Felder in der überschriebenen Methode referenziert werden? ___
1
Antwort

Eclipse Neon - Inhaltshilfe Timing Out

Ich bin seit Jahren Eclipse-Nutzer und der Content-Assistent hat immer gut funktioniert. Seit ich auf Eclipse Neon umgestiegen bin, hatte ich Probleme mit der Inhaltshilfe. Inhaltshilfe hängt für einige Sekunden, dann erhalte ich den folgenden F...
21.10.2016, 18:28
1
Antwort

Sollte JDK 9 die Instanziierung von Lambda-Ausdrücken nicht zulassen, wenn letzte Felder in der überschriebenen Methode referenziert werden?

Ich habe mit dem neuen Eclipse Neon gearbeitet und einige meiner Codes haben mir sofort Fehler gemacht. Das war mir zunächst seltsam, aber dann fand ich hier , dass der Neon ECJ (Eclipse Java Compiler) übernimmt die Einstellung des frühen Rele...
10.02.2017, 20:49