如何在 Groovy 中获取 class 字段标识符作为字符串?

How to get class field identifier as String in Groovy?

假设简单 Groovy class (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.

我不确定你想要完成什么,但你可以像这样获得所有声明的字段名称:

assert ['name', 'age'] == Person.declaredFields.findAll { !it.synthetic }.collect { it.name }

否则 declaredFields 是您可以使用的 java.lang.reflect.Field 列表。

wrote a lib前段时间写了类型检查查询。这可能是您想要的:

import org.latitude.Latitude

Customer customer = Latitude.forClass Customer
assert customer instanceof Customer
assert customer.name == "name"