【发布时间】:2020-08-22 23:06:55
【问题描述】:
如果我理解正确,这里有一些示例 java 代码在 1.5 下是非法的
(自@Override could not be used for overrides of interface methods until java 1.6):
public class A {
public static interface MyInterface {
public void myInterfaceMethod();
}
public static class MyClass implements MyInterface {
@Override public void myInterfaceMethod() {}
}
}
我想在我的源代码中找到所有这些与 1.5 不兼容的地方, 所以我在我的 ubuntu linux 机器上安装了一个支持 java1.5 的编译器:
sudo apt install openjdk-8-jdk
JAVAROOT=/usr/lib/jvm/java-1.8.0-openjdk-amd64
${JAVAROOT}/bin/javac -version
# javac 1.8.0_232
并编译了上面的java源码:
${JAVAROOT}/bin/javac -source 1.5 -Xlint:all -Xlint:-options A.java
我预计上面的 java 代码会被拒绝。但它 尽管在 1.5 下是非法的,但显然编译成功。
发生了什么事?我是否误解了关于@Override 的1.5 规则?
还是我误解了-source 1.5 应该做什么?
FWIW,我注意到 -source 1.4 确实给出了预期的错误:
${JAVAROOT}/bin/javac -source 1.4 -Xlint:all -Xlint:-options A.java
A.java:6: error: annotations are not supported in -source 1.4
@Override public void myInterfaceMethod() {}
^
(use -source 5 or higher to enable annotations)
1 error
【问题讨论】:
-
为什么? Java 1.5 于 2004 年 9 月 30 日发布。在源代码级别与这么旧的版本保持严格兼容的目的是什么?
-
@ElliottFrisch 我选择哪些 java 版本以使我的代码兼容是一个判断调用,而不是重点。我担心的是,我希望能够就我的源代码兼容的 Java 编译器版本范围做出/发布一个简单而准确的声明,以供可能使用各种编译器版本编译它的人使用。目前我似乎无法判断我的代码是否符合 1.5。
-
@DonHatch 您可以从 oracles 网站下载 Java SE5 JDK。我已将其链接在答案的底部。