【问题标题】:'Must Override a Superclass Method' Errors after importing a project into Eclipse将项目导入 Eclipse 后出现“必须覆盖超类方法”错误
【发布时间】:2010-12-13 06:47:10
【问题描述】:

任何时候我必须将我的项目重新导入 Eclipse(如果我重新安装了 Eclipse,或者更改了项目的位置),几乎所有我的重写方法的格式都不正确,从而导致错误:

该方法必须覆盖超类方法

值得一提的是,无论出于何种原因,对于 Android 项目,方法参数值并不总是填充,因此我必须自己手动填充它们。例如:

list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

    //These arguments have their correct names
    public void onCreateContextMenu(ContextMenu menu, View v, 
                                    ContextMenuInfo menuInfo) {                 
    }

});

最初会这样填充:

list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

    //This methods arguments were not automatically provided    
    public void onCreateContextMenu(ContextMenu arg1, View arg2,
                                    ContextMenuInfo arg3) {
    }

});

奇怪的是,如果我删除我的代码,并让 Eclipse 自动重新创建该方法,它会使用我已经拥有的相同参数名称,所以我真的不知道问题出在哪里,除了自动格式化适合我的方法。

不得不手动重新创建我所有被覆盖的方法,这变得相当痛苦。如果有人能解释为什么会发生这种情况或如何解决它。我会很高兴的。

也许是因为我格式化方法的方式,这些方法在另一个方法的参数中?

【问题讨论】:

标签: java android eclipse overriding superclass


【解决方案1】:

Eclipse 默认使用 Java 1.5,并且您有实现接口方法的类(在 Java 1.6 中可以使用 @Override 注释,但在 Java 1.5 中只能应用于覆盖超类方法的方法)。

转到您的项目/IDE 首选项并将 Java 编译器级别设置为 1.6,并确保您选择 JRE 1.6 以从 Eclipse 执行您的程序。

【讨论】:

  • 我的项目设置为 1.6,所以我拍摄星星并将其设置为 1.5,重建,然后回到 1.6。奇迹般地解决了我的问题。感谢您为我指明正确的方向!
  • 有同样的问题...尝试了这个答案中给出的建议,但仍然没有成功。 :( :(
  • @MichaelKrauklis 我是 1.6,我遇到了这个问题。我已经设置为 1.5 并清理它,然后设置回 1.6 并再次清理它。仍然没有解决。有什么想法吗?
  • 同样的问题,就我而言,我没有安装 JDK 1.6,只有最新的 1.7,这显然不适用于 Android。安装较旧的 1.6,然后按照这些说明操作,应该可以工作:)
  • 应该提到(就像在其他答案的 cmets 中一样)通常需要一个干净的构建然后重新启动。
【解决方案2】:

使用 Eclipse Galileo 转到 Eclipse -> Preferences 菜单项,然后在对话框中选择 Java 和 Compiler。

现在它仍然可能显示 1.6 的编译器合规级别,但您仍然会看到这个问题。所以现在选择链接“配置项目特定设置...”,在那里你会看到项目设置为 1.5,现在将其更改为 1.6。您需要对所有受影响的项目执行此操作。

这种拜占庭式的菜单/对话框界面是 Eclipse 糟糕的 UI 设计的典型代表。

【讨论】:

    【解决方案3】:

    以防万一其他人同时尝试了 alphazero 和 Paul 的方法但仍然无效。

    对我来说,eclipse 以某种方式“缓存”了编译错误,即使在执行了 Project > Clean...

    我不得不取消选中 Project > Build Automatically,然后执行 Project > Clean,然后再次构建。

    另外,如果有疑问,请尝试重新启动 Eclipse。这可以解决很多尴尬的、无法解释的错误。

    【讨论】:

    • 我不仅这样做了,而且在“清理”对话框中未选中“自动启动构建”。只有这样它才对我有用。
    • 我也必须重新启动 eclipse,即使在删除错误之后也是如此。
    【解决方案4】:

    要解决此问题,请转到您的项目属性 -> Java 编译器 -> 选择编译器合规级别为 1.6-> 应用。

    【讨论】:

      【解决方案5】:

      就我而言,上述解决方案均无效。

      我不得不删除项目工作区中的文件:

      • .project
      • .classpath

      还有文件夹:

      • .settings

      然后我从以前工作的类似项目中复制了这些。这设法修复了我损坏的项目。

      当然在尝试之前的替代方案之前不要使用这种方法!

      【讨论】:

        【解决方案6】:

        这是我第二次遇到这个问题。 第一次根据 alphazero 的建议,它起作用了。 但在第二次我设置为 1.6 时,它在清理和重建后无法正常工作,就像 'CACHE' 这个错误一样。

        如 Rollin_s 所说,尝试关闭“自动构建” -> 错误仍然存​​在!

        所以我从包资源管理器中删除了问题项目(已经设置为 1.6)并再次导入 -> 它开始重建,这次没有错误

        希望这对某人有所帮助

        【讨论】:

          【解决方案7】:

          就我而言,上述解决方案均无效。我必须将我的源代码签出到另一个文件夹。从 eclipse 中选择 File > Switch workSpaces > Other...,然后将代码导入新的工作区。之后它就起作用了。

          【讨论】:

            【解决方案8】:

            Paul 的回答部分对我有用。那时我仍然有一个错误。因此,除此之外,我还必须转到 Properties-> Project Facets 并将 Java 版本从 1.5 设置为 1.6。

            也许这有帮助。

            【讨论】:

              【解决方案9】:

              修复必须覆盖超类方法错误并不难,您只需将 Java 源代码版本更改为 1.6,因为从 Java 1.6 开始,@Override 注解可以与接口方法一起使用。要将源版本更改为 1.6,请按照以下步骤操作:

              1. 选择项目,右键单击,属性
              2. 选择 Java 编译器并选中“启用项目特定设置”复选框
              3. 现在将编译器合规级别设为 1.6
              4. 应用更改

              【讨论】:

                【解决方案10】:

                如果以上都没有帮助,请确保您选择了正确的“执行环境”,并且不是“备用 JRE”。

                可在以下位置找到:

                项目 -> 构建路径 -> 库

                选择JRE System Library,然后点击Edit...

                如果选择了“Alternate JRE ...”,请将其更改为合适的“执行环境”,例如JavaSE-1.8 (jre1.8.0_60)。不知道为什么,但这会解决它。

                【讨论】:

                • 我选择了一个“执行环境”,然后按确定,错误就消失了。然后我回到同一个对话框,选择“Workspace default JRE (...)”,这是我之前从 Eclipse 收到错误时的选择,然后按 OK,错误没有发生?!?这一定是 Eclipse UI 错误或类似的错误(我使用的是 Eclipse Neon 4.6.2)
                【解决方案11】:

                在我的情况下,当我将 Maven 项目导入 Eclipse 时发生了这个问题。为了解决这个问题,我在pom.xml 中添加了以下内容:

                <properties>
                   ...
                   <maven.compiler.source>1.8</maven.compiler.source>
                   <maven.compiler.target>1.8</maven.compiler.target>
                </properties>
                

                然后在项目的上下文菜单中,转到“Maven -> Update Project ...”,然后按 OK。

                就是这样。希望这会有所帮助。

                【讨论】:

                • 谢谢,我猜这会覆盖父 pom 配置或其他东西。 (我反过来说问题,eclipse没有问题,但是maven的编译器让我“必须覆盖等”)
                【解决方案12】:

                当您的 maven 项目使用不同的 Compiler Compliance 级别而 Eclipse IDE 使用不同的 Compiler Compliance 级别时,就会发生这种情况。为了解决这个问题,我们需要将 Maven 项目的 Compiler Compliance 级别更改为 IDE 使用的级别。

                1) 在 Eclipse IDE 中查看 Java 编译器合规性级别的使用

                *) Window -> Preferences -> Compiler -> Compiler Compliance level : 1.8 (or 1.7, 1.6,, ect)

                2) 更改 Maven 项目的 Java 编译器合规级别

                *) 转到“项目”->“属性”-> 选择“Java 编译器”-> 更改编译器合规级别:1.8(或 1.7、1.6 等)

                【讨论】:

                  【解决方案13】:

                  现在是 2020 年 -

                  Project>右键>Java Compiler>Compiler Compliance Level>将此更改为1.8 [或最新级别]

                  【讨论】:

                    猜你喜欢
                    • 2021-11-26
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-08-28
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多