Class.getFields() 返回的字段顺序
Class.getFields()
的 Javadoc 说:“返回的数组中的元素没有排序,也没有任何特定的顺序。”
关于顺序实际上是如何确定的有什么提示吗?当我执行此方法两次时,是否有可能以不同的顺序获取字段?换句话说,对于给定的编译类,甚至在同一源文件的编译之间,顺序是否稳定?
Javadoc for Class.getFields()
say: "The elements in the array returned are not sorted and are not in any particular order."
Any hints on how the order actually is determined? Is it possible that when I execute this method twice, I get fields in different order? In other words, is the order stable for given compiled class, or even between compilations of the same source file?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
它应该是稳定的,对于 Oracle 的 JVM 来说,它是它们声明的顺序,但您不应该依赖于此。
您应该根据字段名称(以及可能声明的类)而不是位置进行查找。
It should be stable, and for Oracle's JVM its the order they are declared, but you should not rely on this.
You should base lookup on the field's name (and possibly declaring class) rather than position.
至少在我的 JVM 上,
Class.getFields() 按声明顺序返回字段。
另一方面,Class.getMethods() 并不总是如此。它按照(我相信)类加载器看到字符串的顺序返回它们。因此,如果两个类具有相同的方法名称,则第二个加载的类将在其他方法之前返回共享方法名称。
javap 确认编译器按声明顺序编写字段和方法。
请参阅此代码示例的输出。
在我的 JVM(1.7.0_45,Windows)上返回
On my JVM, at least,
Class.getFields() returns fields in declaration order.
Class.getMethods(), on the other hand, doesn't always. It returns them in (I believe) the order the classloader sees the strings. So if two classes have the same method name, the second-loaded class will return the shared method name before its other methods.
javap confirms the compiler wrote both fields and methods in declaration order.
See the output of this code sample.
on my JVM (1.7.0_45, Windows) this returns
创建一个返回排序列表的辅助方法,并在需要字段列表时使用该方法。或者按名称而不是索引查找。
Create a helper method that returns a sorted list, and use that instead whenever you need the list of fields. Or lookup by name instead of index.
属性的自然顺序使用 readKeys() 方法为 Ujorm 框架 提供其键值对象。
结果的每个项目都具有类似的功能,例如字段,包括从对象读取值和向对象写入值。例如,请参阅下一个代码:
键的自然顺序可以通过以下方式迭代:
请参阅 文档了解更多信息。
An natural order of properties offers the Ujorm framework with its key-value objects using the readKeys() method.
Each item of the result have got similar features like the Field including reading and writting values from/to the object. For example see the next code:
The natural order of keys can be iterated by:
See the documentation for more information.