奇怪的行为重写方法。我有安娜错误

时间:2016-04-18 04:11:35

标签: java maven interface osgi apache-karaf

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

payment
  - payment-api
  - payment-impl
payment-api中的

我有界面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>

工作正常。但是现在,如果我尝试将新mrthod添加到UserService并在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使用注释覆盖methosd。另一种已经实现的方法在没有注释的情况下工作正常

1 个答案:

答案 0 :(得分:1)

impl模块可能正在引用api模块的陈旧版本。您可能希望重命名版本1.0.0-SNAPSHOT,清除本地maven存储库(通常位于~/.m2/repository中),然后清理并重建产品。

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

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

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