【问题标题】:@Override compile error, implementing an interface (eclipse jdk1.6.0_23 linux)@Override 编译错误,实现一个接口(eclipse jdk1.6.0_23 linux)
【发布时间】:2011-06-27 02:48:06
【问题描述】:

在为实现接口的类使用 @Override 注释时,我在 Eclipse 中遇到编译错误。

编译器合规级别设置为 Java 6.0。

我使用的是最新版本的 6.0 jdk。

错误: “{classname} 类型的方法 {methodname} 必须覆盖超类方法”

相同的代码在具有类似配置的 mac 上运行良好。

public interface ChannelIF {
...
    public boolean canSendNarrowcast();
    public boolean canSendBroadcast(); 
}

public class FacebookChannel implements ChannelIF 
{
...
    @Override
    public boolean canSendNarrowcast() { return true; }

    @Override
    public boolean canSendBroadcast() { return true; }
}

【问题讨论】:

  • 你得到的完整编译错误是什么?
  • 只是猜测。也许您只检查了工作区编译器合规级别(设置为 6),但您的项目将自己的设置为 jdk5。
  • @Progman - 编辑问题以包含错误字符串
  • @Grzegorz Oledzki - 好建议。此项目正在继承工作区默认值 (6)
  • 您使用的是 Eclipse 3.7 里程碑还是夜间构建?可能是最近日食的回归。

标签: java linux eclipse compiler-errors jdk1.6


【解决方案1】:

此功能仅在 Java 6 及更高版本中有效。我看到你正在使用 jdk 1.6。那挺好的。可能的原因:您正在使用-source 1.5 进行编译。是这样吗?如果是的话,可以改成-source 1.6吗?

【讨论】:

  • 我怀疑你是对的,但我在 Eclipse 中在哪里检查呢? eclipse 中的编译器合规级别已经设置为 6.0 (1.6)
  • 对于 Eclipse:右键项目 -> 属性...> Java 编译器,然后根据需要进行配置
【解决方案2】:

我也遇到了问题,刚刚解决。 在Project->右键->properties->Java compiler中将“Compiler compliance level”改为1.6。

【讨论】:

    【解决方案3】:

    在eslipse中可以使用不同版本的编译器。

    查看 eclipse Preference->Java->Compiler“编译器合规性级别”中的配置。 您必须选择“1.6”。

    【讨论】:

      【解决方案4】:

      我刚刚发现,在使用 maven 时,我还需要修改 pom.xml 以获得编译器插件。我已经正确指定了所有设置,但我需要这个:

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <inherited>true</inherited>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
          </plugin>
        </plugins>
      </build>
      

      【讨论】:

        【解决方案5】:

        所以,我一直遇到这个问题,在运行了几次上述解决方案之后,看到我的 Java 版本一直设置为 1.7,没有使用 Maven,所以只好退出并重新启动 Eclipse 几次正如@jdowdell 建议的那样,在此之后,它似乎可以工作,直到我下次实施其中一个。我意识到当我重新启动 Eclipse 时,它​​提示我保存我的文件,我意识到我的接口没有被保存,所以原来的方法,被覆盖的方法,在磁盘上不存在。这就是为什么退出并重新启动 Eclipse 可以解决问题。

        tl;dr :检查所有文件是否已保存。

        【讨论】:

          【解决方案6】:

          听起来您的方法签名不匹配。它们必须相同,包括诸如抛出的检查异常之类的东西。发布您的代码!

          【讨论】:

          • 添加了代码示例。注意:代码在其他配置中编译得很好。我认为这与我在 linux 中运行的 jdk 版本有关,或者与我没有看到的 linux eclipse 配置有关。
          【解决方案7】:

          检查运行时库, 编译器设置可能不同

          右击项目名称、属性、Java Build Path、Libraries

          查看 JRE 系统库的版本,它很可能设置为 1.5 或更低。 选择JRE System library,然后点击remove 点击添加库,选择JRE系统库,下一步 然后是 Workspace Default 或

          【讨论】:

            【解决方案8】:

            我遇到同样的问题大约一个小时,然后它似乎神秘地自行解决了。我希望我知道我做了什么。我从设置为 1.6 的工作区设置开始,不知不觉地将项目设置设置为 1.5 兼容性。我发现了这一点并将项目编译器设置更改为 1.6,这解决了一些错误,但没有解决接口的 @Override 问题。以下一些组合修复了它:

            1. 将 jre 从 jdk 改回 Eclipse 自定义安装的 jre(或者其他人,不是我)。
            2. 在编译器部分禁用项目特定设置,并在编译器的项目和工作区设置上单击重置为默认值。
            3. 退出 Eclipse 并以管理员身份重新运行它(我将 eclipse 从 .zip 复制到 Windows 上的 Program Files 中,而不是从安装程序中;并且我认为它无法更改其配置文件作为该文件夹的子文件而不运行为管理员 - 但我可能大错特错)。

            一个人显然通过完全卸载并重新安装所有 java/eclipse 相关组件解决了这个问题:http://p2p.wrox.com/book-beginning-android-application-development/87299-override-errors-despite-1-6-a.html

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-06-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-13
              • 2020-10-21
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多