如何在Groovy中将类字段标识符作为String?

时间:2015-08-27 17:57:00

标签: groovy metaprogramming

假设简单的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

2 个答案:

答案 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"