2013-01-14 27 views
5

Đọc tài liệu @RequestMapping: http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/bind/annotation/RequestMapping.htmlTại sao chú thích @RequestMapping chấp nhận tham số Chuỗi trong java nhưng không phải trong scala?

Nó chấp nhận tham số mảng String cho ánh xạ đường dẫn của nó.

Vì vậy, các công trình này sử dụng java:

@RequestMapping("MYVIEW") 

nhưng trong scala tôi cần phải sử dụng:

@RequestMapping(Array("MYVIEW")) 

Phiên bản scala có ý nghĩa như chú thích hy vọng một mảng String. Nhưng tại sao trên làm việc trong java, nên nó không cung cấp cho một lỗi thời gian biên dịch?

Dưới lớp 'ArrayChecker' (một lớp học tôi đã viết để minh họa điểm này) gây ra một java biên dịch lỗi thời gian:

Phương pháp acceptArrayParam (String []) trong các loại ArrayChecker không áp dụng cho đối số (string)

public class ArrayChecker { 

    public static void main(String args[]){ 

     String[] strArray; 

     acceptArrayParam("test"); 
    } 

    private static void acceptArrayParam(String[] param){ 

    } 
} 

nên một lỗi tương tự không được gây ra bởi @RequestMapping ("myView")?

Trả lời

6

Mục 9.7.1 của các trạng thái đặc tả Java SE:

Nếu các loại nguyên tố là một loại mảng và ElementValue tương ứng không phải là một ElementValueArrayInitializer, sau đó là một giá trị mảng có duy nhất yếu tố là giá trị đại diện bởi các ElementValue được liên kết với phần tử. Nếu không, nếu ElementValue tương ứng là một ElementValueArrayInitializer, thì giá trị mảng được biểu diễn bởi ElementValueArrayInitializer được liên kết với phần tử.

Với một lời nhận xét làm rõ ở trên nêu rõ:

Nói cách khác, nó là cho phép bỏ qua các dấu ngoặc nhọn khi một mảng phần tử duy nhất là có liên quan đến một loại chú thích mảng có giá trị thành phần.

Vì Scala không có cú pháp khởi tạo mảng tương đương, bạn phải sử dụng Array(elems).

0

Đây là một phần của đặc tả ngôn ngữ cho chú thích sử dụng phần tử value mặc định.

Xem JLS 9.7.3 để biết ví dụ, bao gồm cả một chú thích "Lưu ý rằng dấu ngoặc nhọn bị bỏ qua".

+0

Điều này không chính xác, nó không chỉ áp dụng cho các phần tử 'giá trị'. –

Các vấn đề liên quan