这样说对吗;Java与平台无关,但与版本相关;

这样说对吗;Java与平台无关,但与版本相关;,java,Java,我们的项目应用程序使用Java 5,现在当我更新Java 6时,出现了一些与功能不一致的情况,看到这种情况,我们的经理发表评论说,“Java独立于平台,但依赖于版本”,这是真的吗?新版本的Java将运行以前版本编译的代码。因此,如果您用Java5编译代码,然后尝试在Java6环境中运行它,它就会运行 如果您使用Java 6编译,但它不会在Java 5环境中运行。任何时候升级任何框架时,都可能会出现一些无法预见的更改,这就是为什么单元测试很重要的原因,因为您可以运行测试并确保行为没有更改 没有任何

我们的项目应用程序使用Java 5,现在当我更新Java 6时,出现了一些与功能不一致的情况,看到这种情况,我们的经理发表评论说,“Java独立于平台,但依赖于版本”,这是真的吗?

新版本的Java将运行以前版本编译的代码。因此,如果您用Java5编译代码,然后尝试在Java6环境中运行它,它就会运行


如果您使用Java 6编译,但它不会在Java 5环境中运行。

任何时候升级任何框架时,都可能会出现一些无法预见的更改,这就是为什么单元测试很重要的原因,因为您可以运行测试并确保行为没有更改

没有任何东西表明JDK6在任何时候都会像JDK5那样工作。例如,两个版本的HashMap中的顺序似乎有所不同,但是,由于HashMap是无序的,这不是一个真正的问题,除非您希望顺序是一致的。

根据:

Java平台,标准 版本(JavaSE)是非常强大的 与以前版本的兼容 Java平台。每个版本的 JavaSE具有向上扩展的特性 与以前版本的二进制兼容性 版本,但 报告中指出的不兼容 文档JavaSE没有 支持向下源兼容性, 但是:如果源文件使用新的 语言特性或JavaSE平台 API,它们将不可用于 Java平台的早期版本

文档描述了任何 系统之间的兼容性问题 当前版本和当前版本 就在它前面


因此,如前所述,除了列出的不兼容(被认为是次要的)之外,Java SE的每个版本都与以前的版本具有向上的二进制兼容性。也就是说,没有人强迫您升级(只要支持不是问题)。如果您不想从新版本的新特性(如性能改进、API改进等)中获益,请不要这样做。但在我看来,这些好处总的来说是值得(小)努力的。检查一下自己。

偶尔,新版本的Java会引入新的Java功能。然而,始终保持向后兼容性是出了名的困难,为较新版本的Java编写的代码不能与较旧版本的运行时环境一起工作。

您看到了什么不一致?我们有遗留代码,而不是不同版本的代码,它的最新版本使用的是Java 5,但是当Java 6出现时,我们所有的开发人员都用Java 6更新了我们的系统,但是我们尝试构建最初使用Java 5的代码,代码没有生成,我们都必须回到Java 5,这是我们的应用程序的一个主要问题,它真的激怒了我们的经理,所以他在我们有高级架构师、高级经理、it主管和其他主管的会议上通过了这一声明。我想知道为什么您的Java 5代码库不会使用Java 6生成。你在使用一些时髦的Ant任务吗?我真的很想知道是什么特定的代码破坏了你的构建。我处理过从Java 1.1到Java 5的多个复杂应用程序和框架,从未遇到过Java新版本的问题,无论是在compile还是run.FYI中,这种“向接口添加类会破坏向后的代码兼容性”的做法是许多核心“接口”现在被开发为抽象基类而不是接口的原因。这不是必须的。1.5中有一些代码无法在1.6中编译。我不确定这是否是Eclipse编译器的问题,但是在1.5中,它允许您在接口实现上放置@Override注释。事实上,Eclipse默认情况下会添加这些。在1.6中,这是一个编译器错误,因为它在逻辑上没有意义。但实际上,这是吹毛求疵。在大多数情况下,这是正确的PHe不是说用6编译器编译5代码。他说的是在6个运行时中运行已经编译好的5个代码。这不是绝对正确的。即使是次要的,版本之间也存在二进制不兼容。有关Java 5和Java 6之间的不兼容性,请参阅。阅读OP的第一条评论。她谈到构建失败。@Malaxeur:Override的问题恰恰相反:Java 6代码不会在Java 5下编译,因为Java 5编译器抱怨@Override注释。这本身不是一个编译器问题。Sun的Java编译器/语言人员悄悄地“纠正”了@Override的语义。