我正在使用JDK1.6。当我实现一个接口并在实现类中时,如果我在函数名之前给出@override
,那么Eclipse会抛出一个编译错误。根据Eclipse,下面的代码是错误的。
public class SomeListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// code
}
/* other overridden methods here */
}
如果删除@Override
注释,则代码编译正常。这是否意味着JDK1.6不再要求我们为@override
注释添加前缀?
答案 0 :(得分:27)
您可能需要在eclipse中设置编译器合规性级别。这可以在Window-> Preferences-> Java-> Compiler
中找到如果编译器首选项仍设置为1.5,编译器将对覆盖注释进行barf。
编辑:如果您将其设置为默认值以外的其他任何内容,还要检查每个项目的编译器合规性级别。
答案 1 :(得分:3)
@Overidde从java 1.6开始研究方法实现。
资源:
关于同一主题:
答案 2 :(得分:2)
根据您选择的配置,Java编译器设置可以位于多个位置, 一种方法是Window-> Preferences-> Java-> Compiler,如果设置为某些早期版本,则将其更改为1.6最小值。 另一种方法是右击项目 - >属性 - > Java编译器 - > JDK合规性 - >选择最小JDK1.6,单击“应用”。
进行更改后,让项目构建,构建并将更改生效。
如果以上选项都不起作用 - 尝试将rt.jar添加到类路径中,它将解决问题。
答案 3 :(得分:1)
在Java 1.6版本中更改了@Override注释。 在Java 1.5中,编译器不允许在实现的接口方法上使用@Override注释,从1.6开始。
您必须在属性项目中更改java编译器版本 - > Java编译器
答案 4 :(得分:0)
JDK1.6绝对支持它。我不确定你为什么会遇到问题。
你看到了什么错误?我唯一能想到的是确保在项目设置中使用正确的JDK。也许你正在编译一个较旧的JDK?
答案 5 :(得分:0)
仍未使用@Override注释。您应该检查contextDestroyed
接口中是否确实存在ServletContextListener
方法,并检查此接口的导入包。
答案 6 :(得分:0)
听起来你的编译器是为Java 5设置的,当时不允许在接口上@Override
。