9

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

4

7 回答 7

27

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

如果编译器首选项仍设置为 1.5,编译器将拒绝覆盖注释。

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

于 2010-09-01T14:23:14.903 回答
2

根据您选择的配置,Java 编译器设置可以在多个位置,一种方法是 Window->Preferences->Java->Compiler,如果设置为某个早期版本,则将其更改为最低 1.6。另一种方法是右键项目->属性->Java编译器->JDK合规性->选择JDK1.6最低,点击应用。

进行更改后,让项目构建,它会构建并将更改生效。

如果上述选项都不起作用 - 尝试将 rt.jar 添加到类路径,它将解决问题。

于 2012-11-01T04:47:43.840 回答
1

@Override 注解在 Java 1.6 版本中发生了变化。在 Java 1.5 中,编译器不允许在实现的接口方法上使用 @Override 注释,而从 1.6 开始就允许了。

Java 编译器

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

于 2014-05-14T14:50:43.017 回答
0

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

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

于 2010-09-01T14:25:04.023 回答
0

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

于 2010-09-01T14:25:34.177 回答
0

听起来您的编译器是为 Java 5 设置的,@Override但不允许使用接口。

于 2010-09-01T14:30:57.893 回答