gpt4 book ai didi

java - 奇怪的行为覆盖方法。我有一个错误

转载 作者:行者123 更新时间:2023-12-01 10:02:42 25 4
gpt4 key购买 nike

我在 OSGi 项目中有一些模块。

payment
- payment-api
- payment-impl

payment-api中我有接口(interface)UserService

public interface UserService{
String method1(String p1, int p2);
String method2(String p1);
}

及实现

public class UserServiceImpl implements UserService{

@Override
public String method1(String p1, int p2){
//code
returnt result;
}

@Override
public String method2(String p1){
//code
returnt result;
}
}

我的模块 payment-impl 有依赖项

<dependency>
<groupId>mydomain</groupId>
<artifactId>payment-api</artifactId>
<version>1.0.0</version>
</dependency>

它工作正常。但现在,如果我尝试向 UserService 添加新的 mrthod 并在 UserServiceImpl 中重写此方法后,我会遇到错误:

public interface UserService{
String method1(String p1, int p2);
String method2(String p1);
String test(int a);
}

@Override
public String test(int a) {
return "sdfsdff";
}

java:[94,9] method does not override or implement a method from a supertype

但是如果我删除 @Override 注释,一切正常。我不明白为什么?怎么会这样?

 interface Y{
String method();
}

public class X implemets Y{
@Override
String method(){
return "some string";
}//is error

//------


String method(){
return "some string";
}//is fine

}

如果我没有实现这个方法,编译器会发誓。默认情况下,IDE 会使用注释覆盖方法。另一种已经实现的方法无需注释即可正常工作

最佳答案

impl 模块可能引用了 api 模块的过时版本。您可能需要重命名版本 1.0.0-SNAPSHOT,清除本地 Maven 存储库(通常位于 ~/.m2/repository 中),然后清理并重建产品。

我不确定在版本中添加 SNAPSHOT 后缀是否重要,但在产品开发过程中这样做并不是一个坏习惯。

我也不确定为什么您可能会遇到该模块的过时版本。要真正深入研究这个问题,我建议:

  1. 检查用于运行应用程序的类路径以确定/确认使用 api jar 的位置。
  2. 了解事件的顺序可以确保使用最新构建的代码刷新该 jar。也许您总是需要调用 mvn install 而不能仅仅依赖 IDE 编译过程,这一点我不确定。

关于java - 奇怪的行为覆盖方法。我有一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com