使用JDK7,反射API已更改,现在getDeclaredMethods()返回的方法 not。
现在,我的问题是,Javac生成的.class文件是否包含方法以相同的顺序在源文件中定义它们,还是可以随机顺序编写方法?
Java语言规范的二进制兼容性章节明确说明了类文件中元素的重新排序:
[...]这是Java编程语言支持的一些重要二进制兼容更改的列表:
[...]
在现有类型声明中重新排序字段,方法或构造函数。
[...]
重新排序类或接口的直接超级界面列表。
这意味着它们出现在.class文件中的顺序不由规格决定。如果您想依靠它,则必须(1)知道您的特定实现使用与定义顺序相同的顺序(像您一样对其进行测试是一个好主意,但不能保证任何内容),或(2)自己更改订单。
class.getDeclaredMethods API对此很清楚。最有可能的原因是Javac没有义务以任何特定顺序生成.class。