问题
I'm using JDK1.6. When I implement an interface and in the implementing class, if I give @override
before my function names, Eclipse throws an compilation error. i.e. below code is wrong according to Eclipse.
public class SomeListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// code
}
/* other overridden methods here */
}
If I remove @Override
annotation, then the code compiles fine. Does it mean that JDK1.6 does not require us to prefix the @override
annotation anymore?
回答1:
You probably need to set the compiler compliance level in eclipse. This can be found in Window->Preferences->Java->Compiler
If the compiler preferences are still set to 1.5 the compiler will barf on the override annotation.
Edit: Also check compiler compliance level on a per project basis if you've set those to anything else than default.
回答2:
@Overidde works on method implementation since java 1.6.
Resources :
- Sun's forums - Java Programming - Should @Override apply to implementation of interface/abstract methods?
- dertompson.com - @Override specification changes in Java 6
- The Former Weblog of Peter Ahé - @Override snafu
On the same topic :
- When do you use Java's @Override annotation and why?
回答3:
The Java Compiler settings can be at multiple places based on the configuration You choose, One way is to Window->Preferences->Java->Compiler, change that to 1.6 minimum, if it was set to some earlier version. Another way is Right Click on Project-> Properties ->Java Compiler ->JDK Compliance ->Select JDK1.6 minimum, click apply.
After you make the changes, let the project build, it builds and take the changes into affect.
If none of the above options work - Try adding the rt.jar to classpath, it will fix the problem.
回答4:
The @Override annotation changed in Java 1.6 version. In Java 1.5, the compiler didn't allow @Override annotation on implemented interface methods, from 1.6 it does.
You must change java compiler version in properties project -> Java Compiler
回答5:
JDK1.6 definitely supports it. I'm not sure why you would have issues.
What error are you seeing? The only thing I can think of is to make sure that you are using the correct JDK in your project settings. Maybe you are compiling against an older JDK?
回答6:
No the @Override annotation is still used. You should check that the contextDestroyed
method is really present in the ServletContextListener
interface, and check the imported package for this interface.
回答7:
It sounds like your compiler is set for Java 5, when @Override
on interfaces wasn't allowed.
来源:https://stackoverflow.com/questions/3619036/override-annotation-in-jdk-1-6