2017-07-02 76 views
0

在查看應用程序時,我遇到了這段代碼。需要幫助理解Groovy中的調用數組

groovy.util.ConfigObject config = (groovy.util.ConfigObject)org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(arrayOfCallSite[438].callGetProperty(this.grailsApplication), groovy.util.ConfigObject.class); 

我的問題是,什麼是一個調用點陣列做,把它初始化如何遏制數據將在後面取回?(在這種情況下,配置),我嘗試閱讀常規的文檔,但沒有有用的描述來解釋它所做的事情,只有方法和屬性列表顯示在文檔中。

回答

1

它看起來像反編譯groovy代碼或從groovy生成的java代碼。

讓我們來看看簡單的Groovy腳本:

cfg = new ConfigObject() 
ConfigObject c = cfg 

與腳本變量cfg值的分配行成局部類型定義在Java c變量將是這樣的:

ScriptBytecodeAdapter.setGroovyObjectProperty(localObject, Script61235.class, this, (String)"cfg"); 
ConfigObject c = (ConfigObject)ScriptBytecodeAdapter 
    .castToType(arrayOfCallSite[2].callGroovyObjectGetProperty(this), ConfigObject.class) 

所以,你的代碼大致相當於這個時髦的代碼:

ConfigObject config = this.grailsApplication.xxx 

其中xxx我們在您的問題中沒有看到。

更好地找到原來的Groovy代碼,你會更好地理解它)

+0

這是否意味着調用點陣列永遠不會被開發者直接使用?確實,我從反編譯類文件得到了上面的代碼,因爲它不是開源的。 –

+0

因爲我知道它不可能從普通的groovy代碼中使用'arrayOfCallSite'。但這不是100%)) – daggett