Javac生成的类文件中的方法顺序



使用JDK7,反射API已更改,现在getDeclaredMethods()返回的方法 not。

现在,我的问题是,Javac生成的.class文件是否包含方法以相同的顺序在源文件中定义它们,还是可以随机顺序编写方法?

Java语言规范的二进制兼容性章节明确说明了类文件中元素的重新排序:

[...]这是Java编程语言支持的一些重要二进制兼容更改的列表:

  • [...]

  • 在现有类型声明中重新排序字段,方法或构造函数。

  • [...]

  • 重新排序类或接口的直接超级界面列表。

这意味着它们出现在.class文件中的顺序不由规格决定。如果您想依靠它,则必须(1)知道您的特定实现使用与定义顺序相同的顺序(像您一样对其进行测试是一个好主意,但不能保证任何内容),或(2)自己更改订单。

class.getDeclaredMethods API对此很清楚。最有可能的原因是Javac没有义务以任何特定顺序生成.class。

最新更新