尝试对在类中构建静态映射的类进行单元测试,如下所示:
private static Map<String, SomeClass> MAP = new HashMap<>();
static {
MAP = Map.ofEntries(
Map.entry(SOME_KEY, new SomeClass()),
.
.
.
Map.entry(SOME_KEY, new SomeClass())
);
}当在构造类的过程中初始化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开发相对较新。我应该注意到,应用程序是使用去糖化来构建的,以允许使用一些较新的功能,并且不确定这是否与某些容量相关?
提前谢谢。
发布于 2021-04-03 01:14:05
这似乎与去丑化有关。Map.entry()方法在安卓使用的Java8和7中也不可用。
发布于 2021-04-03 01:57:52
NoSuchMethod错误告诉您该方法不存在。这通常意味着您在运行时使用了错误版本的库。
当您的工作环境与应用程序运行的环境不一致时,就会发生这种情况。在这种情况下,如果您使用与运行时相同的库,您的项目将无法编译。
因为这是JDK中的一种方法,并且是从JDK 9开始引入的,所以如果您使用jdk的早期版本来运行代码,它将无法工作。
请参阅javadoc:https://docs.oracle.com/javase/9/docs/api/java/util/Map.html#entry-K-V-
上面写着:
自: 9以来的
https://stackoverflow.com/questions/66922698
复制相似问题