我有一個Expando類,我需要從Java中檢查其屬性。 在Groovy:使用Java反射檢查Groovy對象屬性
def worker = new Expando()
worker.name = "John"
worker.surname = "Doe"
在Java:
Introspector.getBeanInfo(groovyObject.getClass())
是否有可能在運行時從在Groovy對象編譯類?
我有一個Expando類,我需要從Java中檢查其屬性。 在Groovy:使用Java反射檢查Groovy對象屬性
def worker = new Expando()
worker.name = "John"
worker.surname = "Doe"
在Java:
Introspector.getBeanInfo(groovyObject.getClass())
是否有可能在運行時從在Groovy對象編譯類?
Expando是完全動態的。它不會生成任何字節碼獲取器或設置器,因此不能用作JavaBean。你需要使用bean introspector來做什麼?如果您將其寫入Groovy中,您可以直接使用expando實現該邏輯。
如果您使用的是Java 6,那麼您可以使用Groovy的JSR 223 /腳本引擎(example here)。它允許您從Java評估Groovy代碼。
根據Expando的位置/定義,可能能夠通過評估getProperties()
(從Groovy 1.7開始)獲得其屬性。
我們使用GroovyClassLoader,然後像在Java中一樣使用對象,問題是檢查Java端的bean屬性,以便使用更好的綁定來進行綁定。 – escanda 2010-01-15 09:01:41
我需要它對其屬性進行綁定。我們使用更好的綁定,所以由內省返回的BeanInfo應該包含expando屬性。 groovy用於嵌入小腳本,在這種情況下是加載一行(一個GroovyRowResult對象),但是它的容器是Java中的對象,與其他要綁定的對象相同。 – escanda 2010-01-15 08:57:38