【发布时间】:2012-12-24 09:01:34
【问题描述】:
在 JDK7 中,反射 API 发生了变化,现在 getDeclaredMethods() 返回的方法不按照它们在源文件中声明的顺序返回。
现在我的问题是,javac 生成的 .class 文件是否包含方法与它们在源文件中定义的顺序相同,或者它也可以按随机顺序编写方法? p>
【问题讨论】:
-
您可以通过再次编译和查看反编译代码(使用反编译器)轻松检查自己
-
@vishal_aim - 是的,我已经做到了,对我来说也是如此。我更想知道它是否会发生在不同的 jdk 实现/平台上。
-
从纯语言规范的角度来看,声明方法的顺序对程序没有任何影响,所以我看不出改变方法顺序的编译器是如何不合规,因为该程序将以完全相同的方式工作......
-
@assylias:问题是我有一个遗留代码库,其中包含数千个junit,其中一些取决于它们的执行顺序。他们曾经使用 JDK6(因为反射返回的方法与定义的顺序相同),但使用 jdk7 时会间歇性失败。
-
@JoachimSauer:你完全正确。我同意它们的编码很糟糕,长期的解决方案是更正测试用例,但我正在寻找一种更快的解决方案,以使它们现在可以正常工作。