繁体   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