假设简单的Groovy类(POGO):
class Person { String name; int age }
如何在运行时获取所选标识符?换句话说,程序员在源代码中使用的标识符名称(如“name”和“age”) - 不是在此标识符的变量中保存的值(如“James”和“32”)。
使用结果解决方案(如果有的话)可以编写类似这样的东西(语法错误的伪代码):
assert new Person().name.identifierAsString == 'name'
assert new Person().age.identifierAsString == 'age'
请注意我并不是想获取字段名称列表(如Person.declaredFields
),而是编译时安全的方式将字段标识符作为String
答案 0 :(得分:2)
我不确定你要完成什么,但你可以得到所有声明的字段名称:
assert ['name', 'age'] == Person.declaredFields.findAll { !it.synthetic }.collect { it.name }
否则declaredFields
是您可以使用的java.lang.reflect.Field
列表。
答案 1 :(得分:2)
我前一段时间wrote a lib写了类型检查查询。它可能就是你所追求的:
import org.latitude.Latitude
Customer customer = Latitude.forClass Customer
assert customer instanceof Customer
assert customer.name == "name"