我在Grails Web應用程序中使用Groovy 2.4.3。我有以下特質/類層次結構在它宣稱:如何獲得從Groovy特徵繼承的屬性的java.reflect.Field值?
trait GuidData {
String Guid
}
class Enrollment implements GuidData {
String email
}
當我執行下面的代碼我得到預期的結果:
Enrollment enrollment = new Enrollment(email: "[email protected]", guid: "XXXX")
assert enrollment.properties == ['email':'[email protected]', 'guid':'XXXX']
assert enrollment.getProperty("guid") == "XXXX")
Enrollment.getDeclaredField("email") == private java.lang.String Enrollment.email
但是,當我執行方法:
Enrollment.getDeclaredField("guid")
我得到一個NoSuchFieldException。如果我爲「getEmail」方法執行「getDeclaredMethod()」,我會正確地返回一個java.reflect.Method實例。
因此...... Groovy在trait中定義的屬性顯示爲Groovy屬性,並且可以像父類中定義的屬性一樣引用,但它們並不反映爲標準Groovy中具有getter/setter的字段屬性模式。換句話說,如果在調用getProperties()的實例中顯示屬性,我希望反射調用也可以使字段定義正常工作。
你的意思是'Enrollment.getDeclaredField(「guid」)拋出一個'NoSuchFieldException'? – dpcasady
是的。 Enrollment.getDeclaredField(「guid」)引發NoSuchFieldException。 –