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