2009-07-13 5 views
7

Ho accidentalmente lasciato una virgola in più alla fine di uno dei miei elenchi di annotazioni, ma è stato compilato correttamente sul mio computer. Per esempio:Gli elenchi di annotazioni java dovrebbero consentire una virgola aggiuntiva dopo l'ultima immissione?

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

Avviso la virgola in più dopo la seconda @NamedQuery. Sembra compilare bene sulla mia macchina, ma qualcun altro ha avuto problemi nella compilazione del codice sulla propria macchina, quindi l'ho rimosso. Ma ora sono curioso di sapere se dovrebbe essere permesso e, in tal caso, quale versione di java lo consente.

Non sono stato in grado di trovare alcun riferimento a questo ovunque online.

risposta

6

Penso che in questo caso hai a che fare con Array Initializers che consentono la virgola extra.

Esempio:

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

Questa è stata parte del JLS dall'inizio.

+0

> Una virgola finale può apparire dopo l'ultima espressione in un inizializzatore di array e viene ignorata. (+1) – Tim

+2

La specifica della lingua Java consente esplicitamente una virgola finale in Array di annotazioni (http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.7). Tuttavia sembra che ci sia un errore in javac che genera un errore ("avvio illegale di espressione"). Quindi, per sicurezza, non dovresti usare virgole trailing nelle annotazioni, mentre sono abbastanza ok negli inizializzatori di array. –

4

Si noti che questo funzionerà in alcuni contesti di elaborazione delle annotazioni e non in altri. Se usi l'APT della riga di comando di Sun, causerà un brutto errore. (Funziona perfettamente in eclissi, però)

Problemi correlati