先说问题,故事如下:
在类层次结构中混合不同的字节码版本是否安全?有哪些风险?
对于一个案例,C类扩展B,B类扩展A类。A类实现接口I。我的问题将涉及以下示例场景:
- Class A 编译为 Java 1.6 字节码,并具有泛型等 1.6 特性。继承者 B 和 C 被编译为 1.4 字节码。
- 接口我编译为1.6,而实现器编译为1.4。
- 其他涉及不同版本字节码的奇异继承场景。
我已经尝试了我能想象到的许多场景,它似乎运行得很好。但是我仍然有想在这里提问的冲动,因为我只了解表面上的 Java;我知道如何编写和调整 Java,但并不真正知道幕后发生了什么。
现在对于那些无法自拔的人来说,“你为什么需要这样做???”。
我在一个项目中评估通过 RMI 连接到 EJB 2 的传统 Java 1.4 Swing 应用程序迁移到连接到在 1.6 之上运行的较新版本的 App Server 的 Java 1.6 Swing。J2EE 平台仍将是 1.4 (EJB 2)。
迁移不会“将所有内容重新编译到 1.6”,而是“将新功能编码并编译到 1.6”。他们做事的方式是这样的:他们在 CVS 中只有一条路径,每个人都在那里提交。没有任何标签/分支来获取生产代码。每当需要添加新功能时,他们从生产服务器获取 JAR,分解它们,根据需要替换或添加新类,重新打包 jar,将它们放回服务器。因此,如果他们将使用 Java 6 编译并使用上述方法进行部署,将会有很多 1.4 和 1.6 字节码的奇异混合。