对于`Class.getDeclaredClasses()`返回的数组中的元素是否有任何特定的顺序?

时间:2017-05-03 19:31:42

标签: java reflection

Class.getDeclaredMethods声明如下:

  

返回数组中的元素没有排序,也没有任何特定的顺序。

但是,

Class.getDeclaredClasses没有指定返回数组中元素顺序的任何内容。

它应该以任何特定顺序返回元素吗?是否有一些JRE实现规范可以定义这样的?

1 个答案:

答案 0 :(得分:3)

通常,您只能依赖语言规范中明确声明的内容。如果规范中没有明确说明某些内容,即使您以某种方式观察它,也不能假设它会以任何特定的方式出现,因为它可能会在未来发出警告而改变。

您可能会问,如果是这种情况,那么为什么语言规范明确废除了对Class.getDeclaredMethods()的任何保证?如果没有担保意味着“无保证”,那么为什么规范不会对Class.getDeclaredMethods()保持沉默?

那是因为Class.getDeclaredMethods()曾经以特定的顺序返回元素,很多人都依赖于此,但是语言的创造者决定在某些时候废除它,(我认为是Java 7,但我的记忆可能会让我失望,所以他们必须明确说明他们正在把它拿走。

这是一个警告,任何超出规范所述的假设不仅仅是假设会让你陷入麻烦的事情,它是一个真实的事情,实际上已经发生并且很可能会继续发生。放聪明点。不要遇到麻烦。