我有一些Groovy表達式的字符串。我需要:確定Groovy表達式的返回類型
- 執行包含在java.lang.String中表達的
- 獲取結果作爲對象
- 確定結果對象
的類型Groovy的表達是否有可能?另外,如果我不使用Groovy的動態特性,我是否能夠確定表達式的「靜態」類型,即在編譯時不執行表達式本身。
感謝
我有一些Groovy表達式的字符串。我需要:確定Groovy表達式的返回類型
的類型Groovy的表達是否有可能?另外,如果我不使用Groovy的動態特性,我是否能夠確定表達式的「靜態」類型,即在編譯時不執行表達式本身。
感謝
一個非常簡單和容易的方法是使用Eval class。計算指定的String表達式並返回結果。表達式的類型結果是Object
。
def object = Eval.me('1 + 1')
你可以得到一個對象的類與getClass()
方法或乾脆:
assert object.class == Integer
在這個例子中,是不可能確定的靜態類型在編譯時檢查。
@groovy.transform.TypeChecked
void test() {
Integer object = Eval.me('1 + 1')
assert object.class == Integer
}
[Static type checking] - Cannot assign value of type java.lang.Object to variable of type java.lang.Integer
你可以聲明'Object object = Eval.me('1 + 1')',我相信它會起作用嗎?但我想這將是在運行時,這是你的觀點;-) –
是的,它的工作,但我們不知道在編譯時的類型。 –
是的。不知道該類型是否存儲在「ASTNode」元數據中(例如,如果將該字符串傳遞給'AstBuilder') –
結合http://groovy.codehaus.org/api/groovy/util/Eval.html與http://stackoverflow.com/questions/2060427/groovy-grails-how-to-determine-a -data-type – halex