![](/img/trans.png)
[英]java.lang.NoSuchMethodError: android.util.ArrayMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/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.