修复编译版本
Fixing compiled version
我看了看,找不到任何针对我的问题的答案,所以我正在做一个新的。
所以我目前正在寻找一个问题的解决方案,这个问题在形式上是我无法控制的,但如果无论如何我可以尝试做一些事情来解决它,那就太好了。
原因是某些正在加载的 类 是用户提供的,并且未使用最低兼容版本的 java 正确编译,因此会导致不可预测的 java 要求。
当然,只有在必要时才会这样做,但如果它不会为那个 java 版本加载,请尝试修补标记的 java 版本,以便它无论如何都会尝试它。
基本上我正在尝试更正(如果可能的话)标记在 java 字节码上的声明的编译版本,这样不兼容的 java 版本错误理想情况下不会被抛出,即使它们通常会抛出,如果代码最初可以在相关的较低 java 版本上成功编译。
基本上,除了可能缺少的内置库外,我不确定编译器在不同版本之间是否具有截然不同的字节码。如果是这样的话,这样的事情无论如何都行不通。
感谢,jdphenix,这是我需要知道的。
对不起,我在这里做错了什么得到了反对票。
不幸的是,Java class 文件仅向前兼容。因此 class 文件针对系统的 JVM 无法 运行 的较新版本。
主要版本之间存在重大变化。例如,我一眼就能想到的是 Java 5 中的可变参数和泛型。
不幸的是,字节码实际上差别太大了。标记在 class 上的版本是必不可少的,如果不正确,将无法正常工作。遗憾的是,它无法以这种方式修复,因此在这方面你将任由他人摆布。
在class加载阶段,JVM 进行字节码验证。在 class 文件中,它将包含有关编译哪个 java 版本的信息,这有助于 JVM 找出当前试图进一步加载和执行的 java 版本。 Class 文件向后兼容,您可以在 java 5 上编译,并且可以 运行 在更高版本中编译,反之亦然,因为上述验证无法完成。字节码可以注入到已经存在的 class 文件中,但如果注入不正确,应用程序可能会出现一些异常执行。
我看了看,找不到任何针对我的问题的答案,所以我正在做一个新的。
所以我目前正在寻找一个问题的解决方案,这个问题在形式上是我无法控制的,但如果无论如何我可以尝试做一些事情来解决它,那就太好了。
原因是某些正在加载的 类 是用户提供的,并且未使用最低兼容版本的 java 正确编译,因此会导致不可预测的 java 要求。
当然,只有在必要时才会这样做,但如果它不会为那个 java 版本加载,请尝试修补标记的 java 版本,以便它无论如何都会尝试它。
基本上我正在尝试更正(如果可能的话)标记在 java 字节码上的声明的编译版本,这样不兼容的 java 版本错误理想情况下不会被抛出,即使它们通常会抛出,如果代码最初可以在相关的较低 java 版本上成功编译。
基本上,除了可能缺少的内置库外,我不确定编译器在不同版本之间是否具有截然不同的字节码。如果是这样的话,这样的事情无论如何都行不通。
感谢,jdphenix,这是我需要知道的。
对不起,我在这里做错了什么得到了反对票。
不幸的是,Java class 文件仅向前兼容。因此 class 文件针对系统的 JVM 无法 运行 的较新版本。
主要版本之间存在重大变化。例如,我一眼就能想到的是 Java 5 中的可变参数和泛型。
不幸的是,字节码实际上差别太大了。标记在 class 上的版本是必不可少的,如果不正确,将无法正常工作。遗憾的是,它无法以这种方式修复,因此在这方面你将任由他人摆布。
在class加载阶段,JVM 进行字节码验证。在 class 文件中,它将包含有关编译哪个 java 版本的信息,这有助于 JVM 找出当前试图进一步加载和执行的 java 版本。 Class 文件向后兼容,您可以在 java 5 上编译,并且可以 运行 在更高版本中编译,反之亦然,因为上述验证无法完成。字节码可以注入到已经存在的 class 文件中,但如果注入不正确,应用程序可能会出现一些异常执行。