我正在編寫一個Groovy腳本(作爲Grails插件的一部分),我想獲取GrailsDomainClass的屬性列表,該列表是我的插件的用戶可能會定義。我可以使用domainClass.properties
(其中domainClass是GrailsDomainClass)來執行此操作。通過GrailsDomainClassProperty區分Grails領域類字段和getBlah()方法
但是,假設用戶有Grails領域類:
class Example {
String name
static constraints = {
}
def getSomeNonExistingProperty(){
return "Not-a-real-property"
}
}
在這種情況下,domainClass.properties
返回既name
和someNoneExistingProperty
我明白,這是因爲Grails的是生成一個列表只讀屬性可以在某人擁有getBlah()方法的情況下使用。這很好,但在我的腳本中,我只想用「真實」屬性(或者至少是非只讀屬性)執行一些操作。
也就是說,我想要某種方式來區分或識別someNonExistingProperty
作爲只讀屬性,或者作爲Grails生成的屬性,而不是由我的插件的用戶在domainClass中作爲字段明確輸入。
我看了一下GrailsDomainClassProperty類,它有一系列的方法提供有關屬性的信息。然而,他們都沒有告訴我某個屬性是否是隻讀屬性,或者是讓我區分domainClass中定義的字段和Grails由於「getSomeNonExistingProperty」動態創建的字段()「 方法。
我在這裏錯過了一些明顯的東西嗎?有沒有辦法獲得一個明確的用戶定義的字段列表(例如,在上面的例子中的名稱)?
重命名getX()方法是可行的,只是這是一個插件,所以它不是(一般情況下)我的代碼腳本正在採取行動 - 我不想堅持使用插件的任何人都需要避免getX()方法。使用反射的想法值得跟進,謝謝。我會看看是否有幫助 - 但是我很可疑,因爲那樣會出現相反的問題,即不排除「真實」屬性,但確實有一個與它們關聯的getX()方法。 – Glennn 2010-10-25 06:55:03