2012-10-29 25 views
1

我有一些Groovy表達式的字符串。我需要:確定Groovy表達式的返回類型

  1. 執行包含在java.lang.String中表達的
  2. 獲取結果作爲對象
  3. 確定結果對象

的類型Groovy的表達是否有可能?另外,如果我不使用Groovy的動態特性,我是否能夠確定表達式的「靜態」類型,即在編譯時不執行表達式本身。

感謝

+0

結合http://groovy.codehaus.org/api/groovy/util/Eval.html與http://stackoverflow.com/questions/2060427/groovy-grails-how-to-determine-a -data-type – halex

回答

1

一個非常簡單和容易的方法是使用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 
+0

你可以聲明'Object object = Eval.me('1 + 1')',我相信它會起作用嗎?但我想這將是在運行時,這是你的觀點;-) –

+0

是的,它的工作,但我們不知道在編譯時的類型。 –

+0

是的。不知道該類型是否存儲在「ASTNode」元數據中(例如,如果將該字符串傳遞給'AstBuilder') –

相關問題