2013-07-30 9 views
5

Hãy xem xét các đoạn sau -Groovy thêm các phương thức mới vào các lớp Java như thế nào?

println String.class 

Đầu ra là -

class java.lang.String 

Tôi đã chờ đợi một số lớp con của Chuỗi vì nó chứa nhiều thành viên mà không phải là một phần của lớp Java. Ví dụ -

println String.methods.size() 

methods không phải là thành viên của lớp Java.

Phép thuật này xảy ra như thế nào?

Trả lời

6

Groovy có đăng ký metaclass. Khi bạn gọi một phương thức trên một lớp, registry sẽ được kiểm tra để xem một phương thức mở rộng metaClass có tồn tại cho cá thể lớp đó hay không.

Từ các tài liệu tiêu chuẩn -

Mỗi đối tượng hấp dẫn có một metaclass được sử dụng để quản lý năng động bản chất của ngôn ngữ. Lớp này chặn các cuộc gọi đến các đối tượng groovy để đảm bảo rằng rãnh phù hợp có thể được thêm vào. Source

+0

Tim: Tôi nghĩ tôi nên hỏi bạn câu hỏi trên cho liên kết - đó là câu trả lời của bạn. – R71

+0

Dường như họ đã xóa mọi thứ trước năm 2007 –