为啥 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 Compiler
、uncheck
Enable 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?的主要内容,如果未能解决你的问题,请参考以下文章