2013-01-14 9 views
5

Odczyt dokumentacji @RequestMapping: http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/bind/annotation/RequestMapping.htmlDlaczego adnotacja @RequestMapping akceptuje parametr String w java, ale nie w scala?

Akceptuje parametru tablicy strunowych do swojego odwzorowania ścieżki.

Tak to działa przy użyciu Java:

@RequestMapping("MYVIEW") 

ale w Scala trzeba użyć:

@RequestMapping(Array("MYVIEW")) 

Wersja scala sens jako adnotacja oczekuje tablicy ciągów. Ale dlaczego powyższe działa w języku Java, czy nie daje błędu podczas kompilacji?

Poniżej klasy „ArrayChecker” (klasy I napisał do zilustrowania tej kwestii) powoduje Java skompilować błąd czasu:

Metoda acceptArrayParam (String []) w typie ArrayChecker nie ma zastosowanie dla argumenty (String)

public class ArrayChecker { 

    public static void main(String args[]){ 

     String[] strArray; 

     acceptArrayParam("test"); 
    } 

    private static void acceptArrayParam(String[] param){ 

    } 
} 

Gdyby nie podobny błąd być spowodowane przez @RequestMapping ("MYVIEW")?

Odpowiedz

6

Sekcja 9.7.1 stanów specyfikacji Java SE:

Jeżeli typ elementu jest typu macierz i odpowiednie elementValue nie jest ElementValueArrayInitializer, a wartości z tablicy, którego jedynym elementem jest wartość reprezentuje elementValue jest związany z elementem. W przeciwnym razie, jeśli odpowiednia wartość elementu to ElementValueArrayInitializer, wówczas wartość tablicy reprezentowana przez ElementValueArrayInitializer jest powiązana z elementem.

z komentarzem naświetlające powyżej i zawierającego:

Innymi słowy, dopuszczalne jest pominięcie nawiasów klamrowych kiedy tablica jednoelementowa ma być powiązany z typem adnotacji tablicy wartościach element.

Ponieważ Scala nie ma równoważnej składni inicjalizatora macierzy, należy użyć Array(elems).

0

Jest to część specyfikacji języka dla adnotacji, które używają domyślnego elementu value.

Zobacz przykłady na przykład JLS 9.7.3, w tym jeden z komentarzem "Należy zauważyć, że nawiasy klamrowe są pomijane."

+0

Jest to niepoprawne, dotyczy to nie tylko elementów "value". –

Powiązane problemy