2009-07-13 6 views
7

Ich habe versehentlich ein zusätzliches Komma am Ende einer meiner Annotationslisten hinterlassen, aber es kompiliert auf meinem Computer einwandfrei. Zum Beispiel:Soll Java-Annotationslisten nach dem letzten Eintrag ein zusätzliches Komma zulassen?

@NamedQueries({ @NamedQuery(name="name1",query="FROM Foo"), @NamedQuery(name="name2",query="FROM Bar"), })

Beachten Sie das zusätzliche Komma nach dem zweiten @NamedQuery. Es scheint auf meinem Rechner gut zu kompilieren, aber jemand anderes hatte Probleme, den Code auf seinem Rechner zu kompilieren, also habe ich ihn entfernt. Aber ich bin jetzt neugierig, ob es erlaubt sein soll, und wenn ja, welche Version von Java erlaubt es.

Ich konnte nirgendwo online eine Referenz finden.

Antwort

6

Ich denke, in diesem Fall haben Sie mit Array Initializers, die das zusätzliche Komma ermöglichen.

Beispiel:

int[] foo = new int[] { 1, 2, 3, };

Das hat von Anfang an Teil des JLS gewesen.

+0

> Ein abschließendes Komma kann nach dem letzten Ausdruck in einem Array-Initialisierer erscheinen und wird ignoriert. (+1) – Tim

+2

Die Java-Sprachspezifikation erlaubt explizit ein abschließendes Komma in Annotations-Arrays (http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.7). Es scheint jedoch einen Fehler in javac zu geben, der einen Fehler auslöst ("illegaler Start des Ausdrucks"). Um auf der sicheren Seite zu sein, sollten Sie keine abschließenden Kommas in Annotationen verwenden, während sie in Array-Initialisierern recht gut sind. –

4

Beachten Sie, dass dies in einigen Kontexten der Annotationsverarbeitung und nicht in anderen funktioniert. Wenn Sie Suns Befehlszeilen-APT verwenden, wird dies zu einem schwerwiegenden Fehler führen. (Es funktioniert jedoch gut in der Eclipse)

Verwandte Themen