该文档将该方法描述为:
返回的数组中的元素没有排序,也没有任何特定的顺序
但是我不确定这是否意味着每次应用程序调用例程时订单都不一致.
我正在寻找一种方法为找到的每个字段配对一个唯一的ID - 但它也需要与下次运行应用程序时保持一致,即连续生成相同的ID.
我想迭代遍历找到的每个Field并为每个迭代的元素递增一个计数器.然后将特定元素的ID分配给计数器等于的值,但这些"ID"不一致,但是如果不按一致的顺序返回Fields.
但是我不确定这是否意味着每次应用程序调用例程时顺序都不一致。
它不保证随着时间的推移它会保持一致。但随着时间的推移,它可能会保持一致。
对于不同的 JVM 版本或供应商,行为可能会有所不同。它可能会受到意外事件的影响......例如类卸载/重新加载,或 JIT 重新编译。
简而言之,即使你的计划看起来有效,它也可能很脆弱。依赖无证行为是不明智的。
这还取决于您所说的“随着时间的推移”的含义。如果您的意思是在应用程序的单次运行中“随着时间的推移”,那么(IMO)与考虑应用程序的不同运行相比,顺序更有可能保持一致。
最后,请注意不要用它hashCode()来给你下订单。哈希码可能会发生冲突,如果发生冲突,您的排序将不明确。碰撞的概率很小但不为零,如果您的用例与安全相关,那么对于了解算法的人来说制造碰撞并不困难。
顺序不需要在运行中保持稳定。但是,该字段的hashCode()值被定义为稳定的(记录为始终为field.getDeclaringClass().getName().hashCode() ^ field.getName().hashCode()),因此您可以将其用作 ID,但要了解哈希码不能保证是唯一的。
或者,您可以getDeclaredFields()使用适合您的任何排序标准对自己返回的结果进行排序。
| 归档时间: |
|
| 查看次数: |
3697 次 |
| 最近记录: |