【问题标题】:@Override Snafu@Override Snafu
【发布时间】:2010-09-28 05:30:25
【问题描述】:

我已经使用 JDK1.6 在 Eclipse Helios 中创建了一个项目/类文件。我已经让 eclipse 为一个接口的实现类生成代码。

public interface Foo {
    void bar();
}

public class FooImpl implements Foo {
    @Override
    public void bar() {
    }
}

到目前为止一切顺利。现在由于某种原因,我已将项目导入到具有 JDK 1.5 的 Eclipse 中,并且我看到错误消息 The method bar() of type FooImpl must override a superclass method 并快速修复了 remove '@Override' annotation

谷歌搜索后,我知道有类似OVERRIDE_SNAUF 的东西——其中更新了 6.0 Java 编译器以允许在接口方法实现上使用 @Override。

【问题讨论】:

  • 我不是 Java 专家,但您并没有重写方法,因为接口不提供实现,但我猜您自己想通了。那有什么问题呢?只是大声思考?
  • 问题是什么?如何在 Java 6 和 Java 5 之间获得一致的行为。也许检查stackoverflow.com/questions/2135975/…。但是你为什么要使用 Java 5 呢?

标签: java overriding jdk1.6 jdk1.5


【解决方案1】:

@Override 适合在编译阶段检查覆盖语法,因此我猜它也适用于接口。

【讨论】:

  • 也是指接口中方法定义的javadoc,所以javadoc不需要复制粘贴过来。干得好!
【解决方案2】:

找不到问题但是 - 是的,你是对的,@Override 注释不允许在 Java 5 中注释被覆盖的接口方法。因此,如果你想编译使用 Java 5 编写代码。

【讨论】:

    【解决方案3】:

    即使您拥有 jdk 1.6,也可以将编译器选项设置为合规级别 1.5。这样,eclipse 生成的代码将与 java 1.5 兼容(它不会在实现接口的方法上添加 @Override 注释)。我认为您实际上可以将其设置为根本不放置 @Override 注释。

    嗯,实际上它比这更复杂一点。为了完全兼容,您应该同时安装 JDK 1.6 和 JDK 1.5,并将每一个都设置为其合规级别的默认 JDK。这是确保代码完全向后兼容的最佳方式。

    在首选项窗口(一般或特定项目)中,转到 Java->Compiler 并在那里设置合规级别。同样在 Java->Installed JREs 添加 JDK 1.5,然后在 Java->Installed JREs->Execution Environments 单击 J2SE-1.5 并检查新安装的 JDK 1.5。如果您的项目或工作区设置为使用该合规级别,这将确保 Eclipse 将使用编译器行为以及 JDK 1.5 附带的标准库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 2011-09-03
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2019-11-14
      相关资源
      最近更新 更多