2010-01-14 86 views
1

我有一個Expando類,我需要從Java中檢查其屬性。 在Groovy:使用Java反射檢查Groovy對象屬性

def worker = new Expando() 
worker.name = "John" 
worker.surname = "Doe" 

在Java:

Introspector.getBeanInfo(groovyObject.getClass()) 

是否有可能在運行時從在Groovy對象編譯類?

回答

0

Expando是完全動態的。它不會生成任何字節碼獲取器或設置器,因此不能用作JavaBean。你需要使用bean introspector來做什麼?如果您將其寫入Groovy中,您可以直接使用expando實現該邏輯。

+0

我需要它對其屬性進行綁定。我們使用更好的綁定,所以由內省返回的BeanInfo應該包含expando屬性。 groovy用於嵌入小腳本,在這種情況下是加載一行(一個GroovyRowResult對象),但是它的容器是Java中的對象,與其他要綁定的對象相同。 – escanda 2010-01-15 08:57:38

0

如果您使用的是Java 6,那麼您可以使用Groovy的JSR 223 /腳本引擎(example here)。它允許您從Java評估Groovy代碼。

根據Expando的位置/定義,可能能夠通過評估getProperties()(從Groovy 1.7開始)獲得其屬性。

+0

我們使用GroovyClassLoader,然後像在Java中一樣使用對象,問題是檢查Java端的bean屬性,以便使用更好的綁定來進行綁定。 – escanda 2010-01-15 09:01:41