Java:样式兼容性权衡

Java: style compability tradeoff

前几天我想知道我的 Java 代码的兼容性和风格。从 Java 14 开始,增强的 switch 才真正可用。我在下面附加了这个以供比较。现在我发现你是否真的应该使用这种 good 风格值得怀疑,因为在这种情况下你必须在 Java 版本 14 中编译。根据我的经验,很少有人需要 运行 我的代码实际上使用了比 Java 更高的版本 8. 是否有一般规则来确定应该在哪种语言级别编写代码?

int a = 42;

// Old switch
switch(a) {
case 42:
    // Do something
    break;
default:
    // Do something else
}

// New enhanced switch
switch (a) {
    case 42 -> {
        // Do something
    }
    default -> {
        // Do something else
    }
}

你说得对,新的 switch 语句和表达式语法不适用于旧版本的 Java。因此,这意味着您需要考虑是否 需要 编译代码以及 运行 在 Java.

的旧版本上

但这不是一个新问题。例如在 Java 5 中,他们引入了许多新的 Java 语言结构,包括泛型、注释、自动装箱等。并且Java 7介绍了try with resources。并且 Java8 引入了 lambda 表达式。 Java 正在进化。

由每个程序员/项目决定何时开始使用新的语言功能……根据他们的具体要求和限制。我们无法真正为您提供建议,因为我们不知道您的要求和限制是什么。

但是,如果您花太长时间切换到使用更新的语言功能,您最终可能会得到一个包含太多老式笨重代码的代码库;例如显式 boxing/unboxing、原始类型、finally 块中的不稳定资源清理等等。最终您的工作效率会受到影响。

(推论是你需要判断你正在考虑的每个新语言特性在生产力和长期可维护性方面会带来多少好处。有些会比其他的好处少。)


When it comes to compilation, I'm more concerned with consumers who may only have a low version of Java installed ...

不利的一面是,支持不能或(更有可能)不想升级到更新的 Java 平台的客户需要支付额外费用>您<。在某个时候,如果您声明旧版本 Java 对您的产品“不再支持”,那对每个人都是最好的。 (但我们不能告诉你什么时候去做,不可量化的变数太多了……)