簡體   English   中英

如何解決 java.lang.NoSuchMethodError: java.util.Map.entry(Ljava/lang/Object/Ljava$Entry/Object)

[英]How to troubleshoot java.lang.NoSuchMethodError: java.util.Map.entry(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map$Entry

嘗試對 class 進行單元測試,該 class 構建 static map 如下:

private static Map<String, SomeClass> MAP = new HashMap<>();
static {
    MAP = Map.ofEntries(
              Map.entry(SOME_KEY, new SomeClass()),
               .
               .
               .
              Map.entry(SOME_KEY, new SomeClass())
          );
}

在構建 class 期間初始化 map 時,我收到以下錯誤:

java.lang.NoSuchMethodError: java.util.Map.entry(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map$Entry;

at package.ClassContainingMap.<clinit>(ClassContainingMap.java:36).

我在How do I fix a NoSuchMethodError? 並嘗試按照建議在一個地方進行清潔和重建,但無濟於事。 接受的響應表明,可能使用單獨的庫版本來編譯和運行代碼,但我不知道如何弄清楚這一點,因為我對 Android 和 Java 開發相對較新。 我應該注意到,該應用程序是使用脫糖構建的,以允許使用一些更新的功能,並且不確定這是否與某些功能有關?

提前致謝。

這似乎與脫糖有關。 Map.entry()方法在 Java 8 和 7 中也不可用,由 Android 使用。

NoSuchMethod錯誤告訴您該方法不存在。 這通常意味着您在運行時使用了錯誤版本的庫。

當您的工作環境與應用程序運行的環境不一致時,就會發生這種情況。 在這種情況下,如果您在運行時使用相同的庫,您的項目將無法編譯。

因為這是 JDK 中的一種方法,並且從 JDK 9 開始引入,所以如果您使用早期版本的 jdk 來運行您的代碼,它就無法工作。

請參閱 javadoc: https://docs.oracle.com/javase/9/docs/api/java/util/Map.html#entry-KV-

它說:

自:9

暫無
暫無

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

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