问题内容:
我的代码中出现一个NoSuchFieldError,现在oracle不太清楚为什么抛出此错误,只是说:
如果类的定义发生了不兼容的更改,则该错误只能在运行时发生。
有人可以向我解释一个人如何“不兼容地”改变一堂课吗?我正在谈论的课程扩展了很多课程,因此我怀疑这可能与该课程有关,但是我不知道从哪里开始寻找或寻找什么。
问题答案:
如果仅部分重新编译代码,通常会引发此错误。您有旧代码引用了在重新编译的类文件中不再存在的字段。
解决方案是清除所有类文件并重新编译所有内容。
更新: 如果重新编译所有内容后仍然出现相同的错误,则可能是针对外部库的一个版本进行编译,并在运行时使用另一个版本。
现在,您需要做的是首先确定导致问题的类(看起来已经完成了此工作),然后使用-verbose:class
命令行选项运行应用程序。它将在您的标准中转出很多类加载信息,您将能够找到问题类的确切位置。