Service与实现类方法签名一致却提示移除@Override注解问题
解决实现接口方法时
@Override注解报错的问题 明明实现类的addPet方法和接口签名完全一致,却收到“Remove @Override annotation”的错误提示?可以从以下几个方面排查解决:
1. 检查参数类的导入是否一致
接口和实现类中,Pet、Response、SecurityContext这些参数类必须是同一个包下的类。比如接口导入的是com.example.model.Pet,但实现类不小心导入了com.example.dto.Pet,这种情况下编译器会判定方法参数类型不匹配,认为你不是在重写接口方法,进而触发报错。
你可以分别查看接口和实现类的导入语句,确认这些类的全限定名完全一致。
2. 确认项目的JDK编译级别
在JDK 1.5及更早版本中,@Override注解只能用于重写父类方法,不能用于实现接口方法。如果你的项目编译级别设置为1.5或更低,就会出现这个错误。
解决方法:
- 若使用Maven,在
pom.xml中设置maven-compiler-plugin的source和target为1.6及以上:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
- 若直接用IDE设置,比如IntelliJ IDEA,可在
File > Project Structure > Project Settings > Project中把Language Level设置为1.6+。
3. 核对方法签名的细节
仔细对比接口和实现类的方法签名,确保以下细节完全一致:
- 参数顺序:比如接口是
addPet(Pet body, SecurityContext securityContext),实现类不能颠倒参数顺序 - 参数类型:比如
List<String>不能写成原始类型List,泛型必须完全匹配 - 返回值类型:接口返回
Response,实现类也必须返回同一个包下的Response类
4. 清理IDE缓存并重建项目
有时候IDE缓存会导致错误提示,执行以下操作尝试修复:
- 清理项目构建文件(比如Maven执行
mvn clean) - 在IDE中执行Invalidate Caches / Restart(比如IntelliJ IDEA的
File > Invalidate Caches...) - 重新构建项目
你的代码示例参考
接口中的目标方法:
public Response addPet(Pet body, SecurityContext securityContext);
实现类中的方法:
@Override public Response addPet(Pet body, SecurityContext securityContext) { // do some magic! return Response.ok().entity("magic!").build(); }
从代码上看签名完全一致,优先排查前面提到的「导入类不一致」「JDK版本」这两个常见问题。
内容的提问来源于stack exchange,提问作者Aniket Thorat
相关产品推荐
相关产品推荐

