【问题标题】:Is it better practice to write up-to-date or compatible code?编写最新或兼容的代码是更好的做法吗?
【发布时间】:2014-04-21 07:46:23
【问题描述】:

我是使用 NetBeans IDE 的业余 Java 程序员。我在 Java 编程中面临的一个问题是选择正确的目标 JRE 版本。我知道我的大多数朋友至少有 java 6,但很少有人有我编译的完全最新版本。我知道如何为 NetBeans 上的特定目标运行时环境进行编译;问题在于,通过使用 Java 的早期目标版本,编译器需要使用该版本编写的代码。

举一个具体的例子,我偶尔会使用 Java 8 lambda 而不是 new Runnable(){},但是编译器(或至少 NetBeans)不接受这种“现代”代码。另一个例子是使用菱形运算符,或者使用多异常 catch 语句,Java 6 都不支持这两种情况。语言在进化,编译器也在进化,但旧版本的 Java 无法处理这种变化。为了分发我的代码,我不得不使用某些人可能认为过时的代码。

我的问题是:为过时的目标版本编写 Java 以提供兼容性是否被认为是良好做法或常见做法? Java 代码是否有某种形式的“翻译器”或交叉编译器?

【问题讨论】:

  • 这很常见。 “好”是非常主观的。
  • 我不明白你的问题。使用旧版本 Java 的唯一原因是您有遗留问题或公司限制。作为一个业余爱好者,您没有这些限制,您使用 Netbeans 遇到的问题是您可以解决的配置问题。
  • 尽可能要求用户升级到您的代码的目标版本(例如 Java 8)。如果它们不能/不会,并且您需要支持它们,您可以编译为 Java 6,或者拥有两个版本的工具,一个用于 Java 6,一个用于 Java 8。Netbeans 也支持 lambdas,因为7.4 我相信。
  • Raul Guiu,我的朋友很懒,不升级他们的java。当然,我的 Java 是最新的。我想分享我的东西,仅此而已。

标签: java netbeans backwards-compatibility


【解决方案1】:

我的问题是:为过时的目标版本编写 Java 以提供兼容性是否被认为是良好做法或常见做法?

这是常见的做法。

它是否是“良好实践”,高度依赖于上下文。在支持开发人员不想(或不能)升级的旧应用程序和通过不使用新的(并且可能是有益的)功能来阻止您的应用程序开发之间进行务实的权衡。

没有普遍的“最佳”答案。

Java 代码是否有某种形式的“翻译器”或交叉编译器?

实际上,没有。对于旧版本的 Java,有“retro-weavers”允许您在“旧”平台上运行“新”Java。但是,这种方法似乎已经在 J​​ava 6 中消失了。

【讨论】:

    【解决方案2】:

    要回答您的第一个问题,这实际上取决于您所在的公司/办公室设定的标准。

    根据我的经验,大多数时候大公司都在尝试使用成熟且完善的开发平台,他们可能不会提供新语言的尖端功能,但公司希望基础平台首先稳定和安全。如果代码库很大并且项目已经开发了很长时间,他们通常不会费心跳入新平台,因为这意味着他们可能需要投入更多资源来重写/重构大量代码,这并不总是在经济上有利可图。

    我喜欢使用您在我的个人项目中提到的那些功能,但在我的办公室工作中,我们仍在使用 JDK6。

    关于第二个问题,我认为目前没有可行的东西可以做你提到的“翻译”。

    【讨论】:

    • 很遗憾java编译器不够灵活,无法进行翻译。也许关于“您的特殊语法将不会被优化”的编译时警告会更好。不过我敢肯定这不是那么简单。
    • @bimmo - 可惜......但完全可以理解。 Sun / Oracle 有什么价值可以让人们在过时的 JVM 上轻松运行新软件?
    【解决方案3】:

    根据我的经验,这在行业中并不是什么大问题。 Java主要用于服务器,而不是桌面。并且设置具有所需 Java 版本的服务器并不是什么大问题。对于桌面应用程序,我还看到了将 JRE 与应用程序一起提供的方法。使用 60 MB JRE 发布一个小型应用程序(比如说 5 MB)有点难看,但在“企业环境”中,这并不重要,它是提供正确 JRE 的实用方法。但是,我不喜欢这种方法,因为它留下了一些悬而未决的问题,例如如何向 JRE 发送安全更新。

    顺便问一下:Java 6 还支持吗?使用旧的 JRE 是相当大的安全问题。

    【讨论】:

    • 别担心,我不会用太多病毒感染 ASCII art Snake(游戏)!
    • 哈哈,我相信你不会那样做;)但是安全问题主要与 JRE 本身有关。当您使用互联网连接、套接字、数据库连接、小程序时,安全性总是会发挥作用……很多应用程序都这样做。当然,应用程序本身不是病毒。但是今天很多恶意软件都针对 JRE,因为它被广泛使用。
    猜你喜欢
    • 2019-10-17
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2013-01-14
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多