【问题标题】:How to get class field identifier as String in Groovy?如何在 Groovy 中将类字段标识符作为字符串获取?
【发布时间】:2015-08-27 17:56:59
【问题描述】:

假设简单的 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),而是在编译时安全的方式来获取 作为字符串的字段标识符

【问题讨论】:

    标签: groovy metaprogramming


    【解决方案1】:

    wrote a lib 前段时间写过类型检查查询。这可能就是你所追求的:

    import org.latitude.Latitude
    
    Customer customer = Latitude.forClass Customer
    assert customer instanceof Customer
    assert customer.name == "name"
    

    【讨论】:

    • 我知道我没有“thx”,但谢谢!这个图书馆太棒了!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-30
      • 2020-12-22
      • 2023-01-23
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多