我创建了一个具有一些属性的普通Groovy类(即Person类)。现在我想让他们的顺序得到那些声明的属性(我在我的类中定义的),但我不知道该怎么做。
我试过使用Person.metaClass.getProperties(),但它不仅检索声明的属性,而且还检索内置的Groovy属性。
您能否帮我解决这个问题:只需在声明时按顺序获取声明属性。
非常感谢!我们可以通过它的顺序获取Groovy类的声明属性吗?
2
A
回答
7
我看不到用例,但编译器可以在创建字节码时重新排列所有字段的声明。我非常确定排序不是对字段的限制,尽管它应该大部分都是未修改/增强类的情况
根据JVM规范,生成的字段应该在字节码中标记为SYNTHETIC(如生成的方法)这样你就可以测试:
Person.getDeclaredFields().grep { !it.synthetic }
和筛选的基础Groovy的领域,如的ClassInfo,metaClass上和其他人通过__timestamp
开始,但是我不是一个专家,有可能是另一种方式,我不认为的
2
有一个关于这个问题mailing list back in February of this year
答案是,没有。没有办法在没有做额外工作的情况下按照在课堂中声明的顺序获取属性。
- 您可以解析为类的源文件,并生成属性名称从
- 有序列表你可以写一个自定义的注释,以及与此注释即注释字段:
@Order(1) String prop
- 你可以使所有重要的类都实现一个接口,强制它们有一个方法按顺序返回属性的名称。
除此之外,你可能希望有一个重新思考:-(
+0
快速搜索“jvm spec field order”给了我[这个链接](http://code.google.com/p/javastruct/wiki/HowToUseJavaStruct)来加强你的观点;-) – Grooveek 2011-05-20 09:38:04
相关问题
- 1. 我们可以初始化集合属性,当我们在类中声明它
- 2. 如何以与声明相同的顺序读取类属性?
- 3. Groovy:如何获得以基类声明的属性
- 4. 我可以通过php POST获取对象的属性吗?
- 5. 以特定顺序获取类属性
- 6. 按声明的顺序使用反射获取属性
- 7. 我可以信任JavaScript中的声明执行顺序吗?
- 8. 我们可以声明式设置Web控件的Style属性吗?
- 9. 一个静态字段可以获取它声明的类的名字吗?
- 10. 我可以通过它的类型获取C#委托的签名吗?
- 11. 你可以控制TagBuilder类呈现属性的顺序吗?
- 12. 我们可以设置一个类的对象的属性吗?
- 13. 你可以声明Angular 2中的Attribute指令的顺序吗?
- 14. 我可以通过表名获取模型类的名称吗?
- 15. 我可以在Chef属性声明中使用双引号吗?
- 16. 可以通过子类访问父类的属性数据吗?
- 17. 我可以通过属性名称设置属性吗?
- 18. 获取属性列表(通过反射)时,我们是否可以排除ReadOnly?
- 19. WPF - 可以通过它们的值获取所有UI控件
- 20. 我可以通过WCF保证IEnumerables的插入顺序吗?
- 21. 我们可以通过脚本删除HTML5 Canvas标签的“getContext”属性吗?
- 22. 我们可以在swift中通过计算属性中的参数吗?
- 23. Groovy:字段属性被声明多次
- 24. 是否有可能通过它的值获取属性c#
- 25. 我可以声明父级的CSS吗?
- 26. 我们可以通过intent传递singleton类的对象吗?
- 27. RTTI:我可以通过名称获取类型吗?
- 28. 我可以在预先声明的类中使用类型吗?
- 29. 我们真的可以通过CUDA流获得性能提升吗?
- 30. 我可以通过Velocity中的属性名称访问吗?
+1''Person.declaredFields.grep {it.synthetic!} - !得心应手:-D – 2011-05-20 09:34:59
+ 1 for synthetic! – 2011-05-24 08:04:36