我们可以按顺序获取Groovy类的声明属性吗?

时间:2011-05-20 08:49:17

标签: groovy properties


我创建了一个带有一些属性的普通Groovy类(即Person类)。现在我想得到那些声明的属性(我已经在我的课程中定义)和他们的顺序,但我不知道该怎么做。
我试图使用Person.metaClass.getProperties(),但它不仅检索声明的属性,还检索内置的Groovy属性。
能否帮我解决这个问题:在申报时,只需按订单申报 非常感谢!

2 个答案:

答案 0 :(得分:8)

我看不到用例,但编译器可以在创建字节码时重新排序所有字段声明。我非常确定排序不是对字段的约束,尽管它主要应该是未修改/增强类

的情况

根据JVM规范,生成的字段应在字节码中标记为SYNTHETIC(如生成的方法),因此您可以使用以下命令进行测试:

Person.getDeclaredFields().grep {  !it.synthetic }

并过滤基类Groovy字段,如ClassInfo,metaClass和其他以__timestamp开头的

但我不是专家,可能还有另一种我没想到的方式

答案 1 :(得分:2)

mailing list back in February of this year

对此有疑问

答案是,不。没有办法按照它们在类中声明的顺序获取属性而不做一些额外的工作。

  1. 您可以解析该类的源文件,并从该
  2. 生成一个有序的属性名称列表
  3. 您可以编写自定义注释,并使用此注释注释字段,即:@Order(1) String prop
  4. 你可以使所有重要的类实现一个接口,迫使他们拥有一个按顺序返回属性名称的方法。
  5. 除此之外,你可能想要重新思考: - (