为什么 Eclipse 抱怨接口方法@Override?

Why does Eclipse complain about @Override on interface methods?

提问人:Stefan Kendall 提问时间:6/13/2009 最后编辑:AjinkyaStefan Kendall 更新时间:8/3/2019 访问量:106317

问:

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

我将如何禁用此错误?

注意:由于项目要求,我需要针对 Java 1.5 进行编译。

Java Eclipse 接口 注解 语法错误

评论

0赞 akarnokd 6/13/2009
但似乎源代码是针对 Java 6 的?
0赞 Stefan Kendall 6/13/2009
事实上。Java 5 是 mac 支持的后期要求。

答:

272赞 erickson 6/13/2009 #1

在实现接口声明的方法上使用注解仅在 Java 6 之后有效。这是 Java 5 中的一个错误。@Override

确保您的 IDE 项目设置为使用 Java 6 JRE,并且“源代码兼容性”设置为 1.6 或更高版本:

  1. 打开“窗口>首选项”对话框
  2. 浏览到 Java > Compiler。
  3. 在那里,将“编译器合规级别”设置为 1.6。

请记住,Eclipse 可以覆盖特定项目的这些全局设置,因此也要检查这些设置。


更新:

Java 5 下的错误不仅与 Eclipse 有关;直接从命令行使用将出现相同的错误。它不是有效的 Java 5 源代码。javac

但是,您可以指定 JDK 6 的选项,这将从 Java 6 源代码生成 Java 5 版本类文件。-target 1.5javac

评论

0赞 Michael Borgwardt 6/13/2009
不,它不会。它将生成错误消息“javac: source release 1.6 requires target release 1.6”。
9赞 erickson 6/13/2009
不,它不会。它将生成一个编译的类文件。仅当您指定 -source 1.6 选项时,它才会给出该错误,而该选项对于实现此工作不是必需的。
0赞 Stefan Kendall 6/13/2009
你知道,由于我无论如何都是手动构建的,所以我可以将源代码级别保留为 1.6。我无法让任何类型的混合配置工作,这似乎是最简单的。
0赞 Pacerier 1/18/2012
@erickson -target -source 降级也适用于 1.7 到 1.6 吗?stackoverflow.com/q/8869869/632951
0赞 Don Hatch 7/3/2016
这似乎不适用于 1.8 JDK。-source 1.6 -target 1.5说: javac:源版本 1.6 需要目标版本 1.6
8赞 akarnokd 6/13/2009 #2

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

更新2:如果你只做手动构建,你可以编写一个小程序,将原始项目复制到一个新项目中,从java源代码中剥离@Override注释,然后你只需在Eclipse中点击Clean项目即可。

评论

0赞 Stefan Kendall 6/13/2009
中方能否提供具体情况?
0赞 akarnokd 6/13/2009
它与埃里克森所说的在同一页面上。
0赞 Stefan Kendall 6/13/2009
该项目有几 GB 大。一个简单的“副本”甚至不切实际。:/
0赞 akarnokd 6/13/2009
在这种情况下,您需要请求更改权限。或者为 1.5 兼容的源代码创建一个分支并手动修复 java 文件。
1赞 mie 6/13/2009 #3

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

41赞 mitko 7/20/2010 #4

操作如下:

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

  • 启用特定于项目的设置 - “是”
  • 编译器合规性 - 1.6
  • 生成的类文件和源代码兼容性 - 1.5

评论

0赞 whostolemyhat 12/3/2012
谢谢 - 没有意识到每个项目也有它自己的设置
2赞 Muten Roshi 10/16/2014
就我而言,我需要禁用此选项。
12赞 gdoumenc 3/8/2011 #5

还要检查项目是否有分面。java 版本可能在那里被覆盖。

评论

1赞 bpawlowski 3/14/2014
得分!你是对的,我的项目方面覆盖了全局合规性设置。谢谢!
1赞 Peter Tseng 8/8/2012 #6

使用 Eclipse 搜索和替换(删除)“@Override”的所有实例。然后使用“清理”重新添加非接口覆盖。

步骤:

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

可以启用特定于项目的设置。选择您的项目,或更改和上面不要忘记相应的.
如果它不起作用,请从 eclipse 中删除您的项目,删除 , , 文件。和日食。它对我有用
Project > Properties > Java CompileruncheckEnable project specific settingsJdk 1.6JRE.settings folders.project.classpathclean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your project

0赞 Gen 6/23/2016 #8

我理解你的问题,将你的 jdk 从你的 jdk 更改为大于 1.5

0赞 IstaLibera 11/28/2016 #9

通过将 IDE 项目设置为使用 Java 6 JRE 或更高版本,有时并不能消除 eclipse 错误。对我来说,重新启动 Eclipe IDE 有所帮助。

0赞 Ranjan 6/7/2017 #10

即使将编译器合规性设置更改为 1.6 或 1.7 Windows 选项卡,然后是 prefernces,然后是 java,然后是编译器,并将 编译器合规性,我仍然遇到这个问题。我们的想法是,我们 需要去项目文件夹,右键,Java并设置编译器 符合 1.6 或更高版本。这对我有用。