gpt4 book ai didi

java - 为什么 javac -source 1.5 允许在接口(interface)方法上使用 @Override?

转载 作者:行者123 更新时间:2023-12-01 13:01:51 24 4
gpt4 key购买 nike

如果我理解正确,这是一些在 1.5 下非法的示例 java 代码
(从 @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

最佳答案

Oracle's documentation of javac for Java SE8它说:

...

-source release

Specifies the version of source code accepted. The following values for release are allowed:

...

  • 1.5

    The compiler accepts code containing generics and other language features introduced in Java SE 5.

  • 5

    Synonym for 1.5.

  • 1.6

    No language changes were introduced in Java SE 6. However, encoding errors in source files are now reported as errors instead of warnings as in earlier releases of Java Platform, Standard Edition.

...


请注意,该网站说“Java SE 6 中没有引入任何语言更改”。因此, @Override可以用来断言接口(interface)方法被覆盖似乎不被视为语言更改;相反,以前不允许这样做的事实可能被视为某些 Java 5 SDK 编译器中的一个错误。
@Override 起,此行为已得到纠正编译后可以省略,JDK 8 编译器会理解(并验证)注解。因此,注释对创建的字节码没有任何影响。
-source 1.4 ,我们得到一个编译错误,因为 Annotations were introduced with Java 1.5 ,因此包括在运行时保留的注释可能会改变程序的行为,编译器不能忽略它们。

如果我们想找到所有与 Java SE 5 不兼容的东西,我建议下载 Java SE5 JDK from the Oracle Archive (尽管您必须创建一个 Oracle 帐户才能这样做)并尝试使用此 JDK 编译项目。

关于java - 为什么 javac -source 1.5 允许在接口(interface)方法上使用 @Override?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63541942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com