2011-11-29 28 views
24

@ nghĩa là gì trước tên trường trong Groovy? Đối với một số lớp tôi có thể truy cập vào các lĩnh vực cá nhân mà không phải truy cập trực tiếp, chúng ta hãy ComposedClosure ví dụ:Biểu tượng Groovy @ trước các trường

public class Person { 
    private String name 
} 

def u = new Person(name:"Ron") 
println [email protected] //Ron 
println u.name //Ron 

a = {2} >> {3} 
println [email protected] //first closure object 
println a.first //runtime error 
+1

Khả năng truy cập các trường riêng tư của bạn là một lỗi trong triển khai Groovy hiện tại không phải là một tính năng. Bạn không nên sử dụng nó bởi vì họ hy vọng sẽ sửa lỗi trong phiên bản 2.0 và thực hành OO kém –

+1

@Don Nó không có trong lịch trình cho 2.0, nó có thể là 3.0, nhưng tôi sẽ không nín thở khi ban giám khảo vẫn ra ngoài cho dù đó là một lỗi hoặc một tính năng ;-) –

Trả lời

41

Nó cho phép bạn ghi đè quyền sử dụng của người truy cập thuộc tính của groovy. Nếu bạn viết:

println u.name 

groovy sẽ gọi trình tạo tự động được tạo Person.getName(). Nếu bạn viết:

println [email protected] 

nó sẽ chuyển trực tiếp đến trường như trong Java. Trong trường hợp đóng, có vẻ như có trường first nhưng không phải là một trình truy cập tương ứng getFirst.

Trong hướng dẫn sử dụng groovy, tài liệu được ghi là direct field access operator.

6

Nó có nghĩa là bạn đang truy cập vào một lĩnh vực trực tiếp, chứ không phải trải qua một getter.

Xem Groovy operator docs, mặc dù không có nhiều điều để nói. Khác hơn là tránh nó.

Lý do không thành công cho số ComposedClosure là do không có bộ thu hồi cho first (hoặc second).

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