簡體   English   中英

奇怪的行為覆蓋方法。 我有錯誤

[英]strange behavior overridden method. I have ann error

我在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>

工作正常。 但是現在,如果我嘗試將新的方法添加到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注釋,則一切正常。 我cn不明白為什么? 怎么會這樣?

 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。 另外,已經實施的另一種方法也可以正常工作而無需注釋

impl模塊可能引用了api模塊的陳舊版本。 您可能想重命名1.0.0-SNAPSHOT版本,清除本地maven存儲庫(通常在~/.m2/repository ),然后清理並重建產品。

我不確定在此處添加SNAPSHOT版本是否很重要,但是在產品開發過程中這樣做並不是一個壞習慣。

我也不確定為什么您會遇到該模塊的過時版本。 要真正深入研究這個問題,我建議:

  1. 檢查用於運行應用程序的類路徑,以確定/確認使用api jar的位置。
  2. 了解什么事件順序可以確保使用最新構建的代碼刷新jar。 也許您一直需要調用mvn install並且不能僅僅依靠IDE編譯過程,我不確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM