为啥 Eclipse 在接口方法上抱怨 @Override?

Posted

技术标签:

【中文标题】为啥 Eclipse 在接口方法上抱怨 @Override?【英文标题】:Why does Eclipse complain about @Override on interface methods?为什么 Eclipse 在接口方法上抱怨 @Override? 【发布时间】:2010-11-02 13:04:30 【问题描述】:

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

我将如何禁用此错误?

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

【问题讨论】:

但源代码似乎是针对 Java 6 的? 确实如此。 Java 5 是对 mac 支持的后期要求。 【参考方案1】:

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

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

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

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


更新:

Java 5 下的错误不仅仅是 Eclipse;直接从命令行使用javac 会给你同样的错误。 它不是有效的 Java 5 源代码。

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

【讨论】:

不,不会。它将产生错误消息“javac:源版本 1.6 需要目标版本 1.6”。 不,不会。它将生成一个编译的类文件。如果您指定 -source 1.6 选项,它只会给出该错误,这不是使这项工作所必需的。 你知道,反正我是手动构建的,我可以把源代码级别保持在 1.6。我无法让任何混合配置工作,这似乎最简单。 @erickson -target -source 降级是否也适用于 1.7 到 1.6? ***.com/q/8869869/632951 这似乎不适用于 1.8 JDK。 -source 1.6 -target 1.5 说:javac:源版本 1.6 需要目标版本 1.6【参考方案2】:

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

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

【讨论】:

你能提供任何细节吗? 它与埃里克森所说的在同一页上。 该项目有几 GB 大。一个简单的“副本”甚至都不实用。 :// 在这种情况下,您需要请求更改权限。或者为 1.5 兼容的源创建一个分支并手动修复 java 文件。【参考方案3】:

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

【讨论】:

【参考方案4】:

如下操作:

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

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

【讨论】:

谢谢 - 没有意识到每个项目也有自己的设置 就我而言,我需要禁用此选项。【参考方案5】:

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

【讨论】:

得分!你是对的,我的项目方面是覆盖全球合规性设置。谢谢!【参考方案6】:

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

步骤:

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

我了解您的问题,将您的 jdk 从您的 jdk 更改为大于 1.5

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

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

【讨论】:

以上是关于为啥 Eclipse 在接口方法上抱怨 @Override?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 jslint 在模板字符串上抱怨 Unexpected '`'

为啥 Meteor 抱怨集合的插入方法已经定义?

为啥 Perl DBI 抱怨“在未打开的游标上尝试获取”?

为啥 Scala 抱怨类型不匹配?

为啥要将 Java 接口方法声明为抽象的?

怎样在路由器上做ipsec over gre和gre over ipsec?