为什么Eclipse会抱怨在接口方法上使用@ Override?

138

我有一个现有项目,其中在覆盖接口方法时使用@Override而不是超类方法。 我不能在代码中更改这个,但我希望Eclipse停止抱怨此注释,因为我仍然可以使用Maven构建。

我该如何禁用此错误?

注意:由于项目要求,我需要编译为Java 1.5。


但是看起来源代码面向的是Java 6? - akarnokd
确实。Java 5是支持Mac的一个较晚的要求。 - Stefan Kendall
10个回答

272
在实现由接口声明的方法的方法上使用@Override注解只适用于Java 6及更高版本。在Java 5中会出错。
确保你的IDE项目设置为使用Java 6 JRE,并且“源兼容性”设置为1.6或更高版本:
  1. 打开“Window > Preferences”对话框
  2. 浏览到“Java > Compiler”。
  3. 在那里,将“编译器兼容级别”设置为1.6。
请记住,Eclipse可以覆盖这些全局设置针对特定的项目进行设置,所以也要检查一下它们。
更新: 在Java 5下的错误不仅仅是在Eclipse中,直接使用javac命令行也会出现相同的错误。这不是有效的Java 5源代码。 但是,你可以向JDK 6的javac指定-target 1.5选项,这将从Java 6源代码生成一个Java 5版本的类文件。

不会的。它会产生一个错误信息:“javac:源发行版1.6需要目标发行版1.6”。 - Michael Borgwardt
9
不会产生错误,而是会生成一个已编译的类文件。只有在指定了“-source 1.6”选项时才会出现该错误,但这并非使其正常工作所必需的。 - erickson
你知道,既然我是手动构建的,我可以将源级别保留在1.6。我无法让任何混合配置起作用,这似乎是最简单的方法。 - Stefan Kendall
@erickson,-target -source降级对1.7到1.6也适用吗?https://dev59.com/m1_Va4cB1Zd3GeqPR0z9 - Pacerier
@DonHatch,显然解除的限制尚未得到确认,请参见https://dev59.com/2HE95IYBdhLWcg3wY81l#yZ2cEYcBWogLw_1byvG5。 - Amedee Van Gasse
显示剩余5条评论

41

请按照以下步骤操作:

项目 -> 属性 -> java编译器 ->

  • 启用项目特定设置 - '是'
  • 编译器兼容性 - 1.6
  • 生成的类文件和源兼容性 - 1.5

谢谢 - 我没有意识到每个项目也有自己的设置。 - whostolemyhat
2
在我的情况下,我需要禁用此选项。 - Muten Roshi

12

同时也要检查项目是否有面向(facets)设置,Java版本可能会在那里被覆盖。


1
得分!你是对的,我的项目方面正在覆盖全局合规设置。谢谢! - bpawlowski

9

可以启用项目特定设置。选择您的项目 Project > Properties > Java Compiler取消选中 启用项目特定设置 或更改 Jdk 1.6 及以上版本,并不要忘记相应的 JRE
如果不起作用,请从 Eclipse 中删除您的项目,删除 .settings folders.project.classpath 文件。 清理并构建项目,将其导入到 Eclipse 中,然后重置您的 Java 编译器。清理和构建您的项目和 Eclipse。它对我有用。


8
您可以更改编译器设置,接受Java 6语法但生成Java 5输出(据我所记)。如果需要,可以将“生成的类文件兼容性”设置得稍低一些以适应您的运行时环境。 更新:我检查了Eclipse,但它会抱怨如果我将源代码兼容性设置为1.6并将类文件兼容性设置为1.5。如果不允许1.6,则通常手动注释源代码中有问题的@Override注释(这对您的情况没有帮助)。

更新2: 如果您只进行手动构建,可以编写一个小程序将原始项目复制到新项目中,从Java源代码中删除@Override注释,然后在Eclipse中点击“清理项目”。


你能提供任何具体细节吗? - Stefan Kendall
正如 Erickson 所述,它在同一页上。 - akarnokd
这个项目非常大,简单的“复制”甚至都不现实。 :/ - Stefan Kendall
在这种情况下,您需要请求更改权限。或者为1.5兼容的源代码创建一个分支,并手动修复Java文件。 - akarnokd

1
你也可以尝试使用Retroweaver从Java6类创建Java5版本。

1

使用Eclipse搜索和替换(删除)所有"@Override"的实例。然后使用"Clean Up"添加非接口覆盖。

步骤:

  1. 选择包含源文件的项目或文件夹。
  2. 转到"搜索>搜索..."(Ctrl-H)以打开搜索对话框。
  3. 转到"文件搜索"选项卡。
  4. 在"包含文本"中输入"@Override",在"文件名模式"中输入"*.java"。单击"替换...",然后单击"确定",以删除所有"@Override"的实例。
  5. 转到"窗口>首选项>Java>代码样式>Clean Up"并创建一个新配置文件。
  6. 编辑配置文件,并取消选中除"Missing Code>添加缺少的注释>@Override"之外的所有内容。确保未选中"接口方法的实现"。
  7. 选择包含源文件的项目或文件夹。
  8. 选择"源>清理..."(Alt+Shift+s,然后u),然后单击"完成"以添加非接口覆盖。

0
我理解了你的问题,请将你的JDK从当前版本更改为大于1.5的版本。

0

通过配置IDE项目使用Java 6 JRE或更高版本有时无法消除Eclipse错误。对我来说,重新启动Eclipe IDE有所帮助。


0
即使从Windows选项卡,然后首选项,然后Java,然后编译器更改编译器兼容性设置为1.6或1.7,我仍然遇到了这个问题。关键是我们需要进入项目文件夹,右键单击Java并将编译器兼容性设置为1.6或更高版本。这对我有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接