关于Java:”在将项目导入到Eclipse中时,必须重写超类方法”错误

'Must Override a Superclass Method' Errors after importing a project into Eclipse

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

The method must override a superclass method

值得一提的是,这是Android项目——无论出于什么原因,方法参数值并不总是填充的,所以我必须自己手动填充它们。例如:

1
2
3
4
5
6
7
8
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

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

});

最初的填充方式如下:

1
2
3
4
5
6
7
8
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

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

});

奇怪的是,如果我删除了代码,让Eclipse自动重新创建这个方法,它使用的参数名与我已经使用的参数名相同,所以我不知道问题在哪里,另外它会自动为我格式化这个方法。

必须手动重新创建所有重写的方法,这将变得非常痛苦。如果有人能解释为什么会发生这种情况或如何解决它……我会很高兴的。

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


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

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


在Eclipse GaliLo中,您可以选择Eclipse >首选项菜单项,然后在对话框中选择Java和编译器。

现在它仍然可以显示1.6的编译器遵从性级别,但是您仍然会看到这个问题。所以现在选择链接"配置特定于项目的设置…",在这里您将看到项目设置为1.5,现在将其更改为1.6。您需要为所有受影响的项目执行此操作。

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


如果有人同时尝试了阿尔法泽罗和保罗的方法,但仍然不起作用。

对我来说,Eclipse甚至在执行了一个项目>清理之后,仍然"缓存"了编译错误…

我必须取消选中"项目>自动生成",然后执行"项目>清理",然后再次生成。

此外,如果有疑问,请尝试重新启动Eclipse。这可以修复许多难以解释的错误。


若要解决此问题,请转到ProjtProjksProjks:> Java编译器> >选择编译器遵从级别为1.6–>应用。


保罗的回答对我起了部分作用。当时我还是犯了一个错误。所以,除此之外,我还必须去ProjtProtoWorks>项目方面,将Java版本从1.5设置到1.6。

也许这有帮助。


伙计们,在我的情况下,上述解决方案都不起作用。

我必须删除项目工作区中的文件:

  • 项目
  • 类路径

文件夹:

  • 设置

然后我复制了一个以前工作过的类似项目。这成功地修复了我的坏项目。

当然,在尝试之前的备选方案之前不要使用此方法!.


如果上面没有任何帮助,请确保选择了正确的"执行环境",而不是"备用JRE"。

可在以下位置找到:

Project -> Build Path -> Libraries

选择JRE System Library并单击Edit...

如果选择"备用JRE…",则将其更改为适合的"执行环境",如JavaSE-1.8 (jre1.8.0_60)。不知道为什么,但这能解决问题。


这是我第二次遇到这个问题。根据阿尔法泽罗的建议,这是第一次成功。但在第二次我设置为1.6时,它不会像"缓存"这个错误一样工作,在清理和重建之后。

试着像罗林所说的那样关闭"自动构建"--错误还在这里!

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

希望这能帮助别人


修复必须重写超类方法错误并不困难,只需要将Java源版本更改为1.6,因为从Java 1.6 @重写注释可以与接口方法一起使用。要将源版本更改为1.6,请执行以下步骤:

  • 选择项目,右键单击,属性
  • 选择Java编译器并选中"启用项目特定设置"复选框
  • 现在将编译器的符合性级别设置为1.6
  • 应用更改

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

    1
    2
    3
    4
    5
    <properties>
       ...
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    然后在项目的上下文菜单中,转到"maven->update project…",然后按OK。

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


    在我的例子中,上述解决方案都不起作用。我必须将源代码签出到另一个文件夹。从Eclipse中选择文件>切换工作区>其他…然后将代码导入到新工作区。之后就可以了。


    当Maven项目使用不同的编译器遵从性级别,而Eclipse IDE使用不同的编译器遵从性级别时,就会发生这种情况。为了解决这个问题,我们需要将Maven项目的编译器遵从性级别更改为IDE使用的级别。

    1)在Eclipse IDE中使用Java编译器遵从级别

    *)window->preferences->compiler->compiler兼容级别:1.8(或1.7、1.6、etc)

    2)更改Maven项目的Java编译器遵从级别

    *转到"Project"->"Projices"->选择"Java编译器">更改编译器遵从级别:1.8(或1.7、1.6、ECT)