JDAK 1.6中的@override注释

时间:2010-09-01 14:20:03

标签: java eclipse annotations jdk1.6

我正在使用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注释添加前缀?

7 个答案:

答案 0 :(得分:27)

您可能需要在eclipse中设置编译器合规性级别。这可以在Window-> Preferences-> Java-> Compiler

中找到

如果编译器首选项仍设置为1.5,编译器将对覆盖注释进行barf。

编辑:如果您将其设置为默认值以外的其他任何内容,还要检查每个项目的编译器合规性级别。

答案 1 :(得分:3)

答案 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 Compiler

您必须在属性项目中更改java编译器版本 - > Java编译器

答案 4 :(得分:0)

JDK1.6绝对支持它。我不确定你为什么会遇到问题。

你看到了什么错误?我唯一能想到的是确保在项目设置中使用正确的JDK。也许你正在编译一个较旧的JDK?

答案 5 :(得分:0)

仍未使用@Override注释。您应该检查contextDestroyed接口中是否确实存在ServletContextListener方法,并检查此接口的导入包。

答案 6 :(得分:0)

听起来你的编译器是为Java 5设置的,当时不允许在接口上@Override