2013-07-30 63 views
5

考慮下面的代碼片段 -groovy如何向Java類添加新方法?

println String.class 

輸出是 -

class java.lang.String 

我期待字符串的一些子類,因爲它包含許多成員不屬於Java類的一部分。例如 -

println String.methods.size() 

methods不是Java類的成員。

這種魔法是如何發生的?

回答

6

Groovy有一個元類註冊表。當您在類上調用方法時,會檢查註冊表以查看該類實例是否存在metaClass擴展方法。

從標準文檔 -

每個常規對象都有一個用來管理動態 自然語言的元類。這個類攔截對groovy對象的調用 以確保可以添加適當的grooviness。 Source

+0

蒂姆:我想我應該問你上述問題的鏈接 - 這是你的答案。 – R71

+0

他們似乎在2007年之前刪除了任何東西 –