本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>
此文章为stackoverflow问题翻译,原问题:stackoverflow.com/questions/1…
问题概述
不论何时(例如我重新安装了Eclipse,又或者是我改变了项目文件路径)在我需要将我的项目重新导入到Eclipse中,几乎所有我重写过的方法都会报错,错误提示为:
The method must override a superclass method
复制代码
值得一提的是,这都是在Android项目中出现的问题,而且自动导入方法时,参数名称并不总是填充正确的,因此我必须自己手动填充它们。例如:
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
//这些参数的名称是正确的
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
}
});
复制代码
一开始将会自动填充为:
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
//这些参数的名称是正确的
public void onCreateContextMenu(ContextMenu arg1, View arg2,
ContextMenuInfo arg3) {
}
});
复制代码
奇怪的是,如果我移除了我的代码,并且用Eclipse自动创建方法的话,他会用同样的命名方式填充参数名称。所以除了Eclipse会自动为我格式化方法,我不太懂问题在哪。
最高赞回答
Eclipse默认使用Java 1.5并且你的类正实现某一接口(在Java 1.6中可以用@Override,但在Java 1.5中该标签只能用在已经重写了父类方法的方法上)。
去Eclipse顶部菜单栏 Project/IDE Preferences
中,并且设置Java Compiler的level为1.6,同时需要保证选择了JRE 1.6来运行你的代码。
其他解答
1.
在Eclipse Galileo版本下,你可以去Eclipse -> Preferences 菜单栏, 然后选择Java and Compiler。
现在可能显示你的编辑器版本遵循1.6,但你依旧看到这样的错误。所以现在点击Configure Project Specific Settings…”在这里你将看到项目被设置为1.5,现在改为1.6。你可能需要将所有受影响的项目做如此改动。
2.
如果尝试了上面两个回答的方法,依旧有问题的话,下面的办法可能会有帮助。
对我来说Eclipse不知为何“缓存”了编译错误,即使在点击了 Project>Clean,缓存仍然没有小时。我只好取消 Project>Build Automatically选项,之后再点击Project>Clean,之后再次bulid。
当然,如果还不好使,就重启一下Eclipse,再尝试一下。这样可以解决大多数尴尬又难以解释的错误!
总 结
总的来说就是因为Eclipse默认Java环境是1.5。导致@Override注释出错。选好环境版本,并清空编译错误缓存即可!