2016-11-22 41 views

回答

3

所以,你實際看到的是createLink被定義爲Closure,而不是它在執行時返回Closure。閉包本身被執行並委託負責創建StreamCharBuffer的實際工作的實現。 讓我們來看看源,看看究竟發生了什麼事情:

Closure createLink = { attrs -> 
    return doCreateLink(attrs instanceof Map ? (Map) attrs : Collections.emptyMap()) 
} 

正如你可以看到上面有一個名爲Closure類型的代表是工作doCreateLinkcreateLink變量。這恰好是包含類中的受保護方法。

protected String doCreateLink(Map attrs) { 
    ... // actual implementation cut out of this example 
    return useJsessionId ? res.encodeURL(generatedLink) : generatedLink 
} 

正如你可以看到這是在實際工作完成後,生成StreamCharBuffer(好吧,String,這很好地蒙上)。

現在,你爲什麼要這樣做?一種可能的用例是,方法doCreateLink比正式定義中的關閉createLink嚴格得多。通過使用Closure而不是方法,對createLink的調用可以隨着時間的推移而略微改變,因爲對其進行了增強或增加(希望對其以前的用途影響很小或沒有影響)。

希望這有助於解釋一些關於你所看到的和可能的原因。

相關問題