Der folgende Code mit Eclipse kompiliert:Verwendung von Annotations (org.eclipse.jdt.annotation.Nullable) kompiliert mit Eclipse, nicht mit javac
@Retention(RetentionPolicy.CLASS)
@Target({ TYPE_USE })
public @interface Nullable {
// This is org.eclipse.jdt.annotation.Nullable
}
class SomeClass {
private final [email protected] Inner b;
}
aber es funktioniert nicht mit Oracle javac (Version 1.8. 0_141), das ergibt die folgende Fehlermeldung:
SomeClass.java: error: annotation type not applicable to this kind of declaration
ich wette, dass javac und Eclipse-Compiler für den Umgang mit TYPE_USE unterscheiden, aber ich konnte keine Abhilfe finden, um die Anmerkung in meinem Code zu halten (das sollte kompilieren in Eclipse und mit Java). Irgendwelche Hinweise auf diese Angelegenheit?
Wäre '@Nullable SomeOtherClass.Inner b' nicht gleich und compilable? Das ist ein seltsames Konstrukt, das ich noch nie gesehen habe. – Seelenvirtuose
'@Nullable SomeOtherClass.Inner b' kompiliert nicht (unter Verwendung von Eclipse Luna), mit dem folgenden Fehler:' Type-Anmerkungen sind nicht zulässig für Typnamen, die für den Zugriff auf statische Member verwendet werden. Wenn ich mich recht erinnere, kompilierte es irgendwann in der Vergangenheit, und wir mussten beim Aktualisieren von Eclipse auf die seltsame Syntax umschalten (wir entwickeln Eclipse-Plugins). –
Ihr Code wird nicht kompiliert, weil er Importanweisungen, eine Deklaration von 'SomeOtherClass' usw. nicht enthält. Bitte stellen Sie eine MWE bereit, vorzugsweise ohne Abhängigkeit von Eclipse-Bibliotheken. Als ich Ihren Code erweitert habe, um die fehlenden Teile hinzuzufügen, kompilierte er für mich mit 'javac 1.8.0_131', aber vielleicht gibt es einen Unterschied in Ihrem Code oder Ihrer Umgebung. – mernst