2013-01-14 9 views
5

Lettura della documentazione @RequestMapping: http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/bind/annotation/RequestMapping.htmlPerché l'annotazione @RequestMapping accetta il parametro String in java ma non in scala?

Accetta un parametro di array String per la relativa mappatura del percorso.

Quindi questo funziona utilizzando Java:

@RequestMapping("MYVIEW") 

ma in scala ho bisogno di usare:

@RequestMapping(Array("MYVIEW")) 

La versione scala ha senso come l'annotazione si aspetta un array di stringhe. Ma perché sopra funziona in java, non dovrebbe dare un errore di compilazione?

Sotto classe 'ArrayChecker' (una classe che ho scritto per illustrare questo punto) causa un java compilazione errore di tempo:

Il metodo acceptArrayParam (String []) nel tipo ArrayChecker non è applicabile per la argomenti (String)

public class ArrayChecker { 

    public static void main(String args[]){ 

     String[] strArray; 

     acceptArrayParam("test"); 
    } 

    private static void acceptArrayParam(String[] param){ 

    } 
} 

caso non un errore simile essere causato da @RequestMapping ("MYVIEW")?

risposta

6

sezione 9.7.1 della specifica stati Java SE:

Se il tipo di elemento è un tipo di matrice e il corrispondente elementValue non è un ElementValueArrayInitializer, quindi un valore matrice cui elemento suola è il valore rappresentato dalla elementValue è associato con l'elemento. Altrimenti, se ElementValue corrispondente è un ElementValueArrayInitializer, il valore dell'array rappresentato da ElementValueArrayInitializer è associato all'elemento.

Con un commento chiarire quanto sopra affermando:

In altre parole, è consentito omettere le parentesi quando una matrice singolo elemento deve essere associato ad un tipo di annotazione matrice valori elemento.

Perché Scala non ha alcuna sintassi di matrice di inizializzazione equivalente, è necessario utilizzare Array(elems).

0

Questo fa parte delle specifiche della lingua per le annotazioni che utilizzano l'elemento value predefinito.

Vedere JLS 9.7.3 per esempi, incluso uno con il commento "Si noti che le parentesi graffe vengono omesse."

+0

Questo non è corretto, non si applica solo agli elementi 'valore'. –

Problemi correlati