【问题标题】:Was there ever a "breaking change" in the Java language specification?Java 语言规范中是否有过“重大变化”?
【发布时间】:2013-05-12 10:27:43
【问题描述】:

除了引入“assert”关键字这一可能广为人知的例外情况外,Java 语言规范是否曾经发生过变化,导致旧代码不再与新的 JDK 源代码级别兼容?


到目前为止的总结(非常感谢 cmets):

“旧”Java 代码在升级到更高版本时可能会导致编译错误,如果代码使用在更高版本的 Java 语言规范 (JLS) 中引入的关键字之一进行声明:

  • 断言
  • 枚举
  • strictfp

【问题讨论】:

  • 枚举也浮现在脑海中。
  • strictfp。在 1.2 之前是默认的
  • @Dima Goltsman,nio 没有引入任何 语言 更改。 assertenum 是关键字,因此它们的介绍破坏了使用这些词作为标识符的旧代码。例如来自 Jakarta Commons 的 enums 库。
  • 创建了总结的答案,目前真的想不出其他任何东西(Java 的优点)。 @javadeveloper 更改覆盖行为并没有破坏兼容性。

标签: java jls


【解决方案1】:

Java 1.2

  • strictfp 关键字。

Java 1.4

  • assert关键字。

Java 1.5

  • enum 关键字。

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      Java 10 将 var 设为关键字。它仍然是一个有效的变量名,但一个非法的类名。

      【讨论】: