将项目导入Eclipse之后,“必须重写超类方法”错误


1249

每当我必须将我的项目重新导入到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自动重新创建该方法,它将使用与我已经拥有的参数名称相同的名称,因此我真的不知道问题出在什么地方,否则它将为该方法自动格式化我。

必须手动手动重新创建所有我覆盖的方法,这变得非常痛苦。如果有人可以解释为什么会发生或如何解决。我会很高兴的。

也许是由于我格式化方法的方式所致,而该方式位于另一个方法的参数内?


1
请检查此项目,它说明了替代的用法。我认为这种做法不仅对这种情况特别重要,对所有事情都非常重要。stackoverflow.com/questions/94361/...
oagostinho

Answers:


1432

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

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


35
我的项目设置为1.6,所以我为星星拍摄,并将其设置为1.5,重建后又回到1.6。奇迹般地解决了我的问题。感谢您指出正确的方向!
Michael Krauklis'2

6
具有相同的问题...尝试了此答案中给出的建议,但仍未成功。:( :(
aditya_gaur 2011年

6
@MichaelKrauklis我今年1.6岁,遇到了这个问题。我将其设置为1.5并清理,然后又将其设置为1.6并再次清理。仍然没有解决。有任何想法吗?
Pacerier

6
在这里,同样的问题是,我没有安装JDK 1.6,而是安装了最新的1.7,这显然不适用于Android。安装较旧的1.6,然后按照以下说明进行操作即可:)
NoBugs 2012年

4
应该提到它(就像在其他答案的注释中一样),通常需要一个干净的构建,然后重新启动。
gsingh2011

308

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

现在它仍可能显示编译器的遵从性级别为1.6,但是您仍然会看到此问题。因此,现在选择链接“ Configure Project Specific Settings ... ”,在其中您将看到项目设置为1.5,现在将其更改为1.6。您需要对所有受影响的项目执行此操作。

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


78

万一其他尝试过alphazero和Paul方法但仍然无法正常工作的人遇到了这种情况。

对我来说,即使在执行Project> Clean之后,Eclipse也以某种方式“缓存”了编译错误。

我必须取消选中“项目”>“自动构建”,然后执行“项目”>“清理”,然后再次构建。

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


4
我不仅这样做,还没有选中“清理”对话框中的“自动开始构建”。只有这样,它对我有用。
Wilerson 2012年

3
即使删除了错误,我也不得不重新启动Eclipse。
戴夫·卡梅隆

42

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


22

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

也许有帮助。


14

在我看来,以上解决方案均无效。

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

  • 。项目
  • .classpath

和文件夹:

  • 。设置

然后,我从以前正在运行的类似项目中复制了这些内容。这设法修复了我破碎的项目。

当然,在尝试之前的替代方法之前,请勿使用此方法!


14

如果以上方法均无济于事,请确保选择了正确的“ 执行环境 ”,而不是 “备用JRE”。

在以下位置找到:

项目->构建路径->库

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

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


2
我选择了“执行环境”,然后按OK,错误消失了。然后我回到相同的对话框,并选择“ Workspace default JRE(...)”,这是我从Eclipse中获取错误时的先前选择,然后按OK,并且未发生错误?!?这必须是Eclipse UI错误或类似的东西(我在Eclipse Neon 4.6.2上)
mljrg

11

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

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

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

希望这可以帮助某人


10

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

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

10

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

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

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

而已。希望这可以帮助。


谢谢,我想这将覆盖父pom配置或其他内容。(我
反过来提出

6

就我而言,以上解决方案均无效。我必须将源代码签出到另一个文件夹。从Eclipse中选择“文件”>“切换工作空间”>“其他...”,然后将代码导入到新的工作空间中。在那之后工作。


2

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

1)查看Eclipse IDE中的Java Compiler Compliance级别使用

*)窗口->首选项->编译器->编译器符合级别:1.8(或1.7、1.6等)

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.