【发布时间】:2017-12-15 16:46:24
【问题描述】:
我正在调试Java 代码,从Matlab 调用并得到一个异常:
Java exception occurred:
java.lang.NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
怎么可能,那个库类没有库方法?
更新
Matlab 正在使用Java7。我调用的代码是为Java8 编译的,包含语法
for (Tag t : matrix.keySet()) {
即Java8-特定。虽然声称它应该与Java7 二进制兼容,否则在Java8 中做许多妥协是没有意义的。
【问题讨论】:
-
您运行的是什么版本的 Java?乍一看,Matlab 期待的是 Java 8 版本,但您可能正在运行 7。
-
@Raz_Muh_Taz true,但在 Java 7 中,
keySet根据其签名返回Set<K>,而在 Java 8 中,它返回ConcurrentHashMap.KeySetView<K,V>。 -
@Dmis 您可以在
Java8机器中使用Java7代码,但不能在Java7机器中使用Java8代码。 stackoverflow.com/questions/4692626/… -
@Dims 是什么让您期望您可以使用针对 Java 8 编译的代码,并期望 Java 8 中存在的所有方法都存在于 Java 1.0 中?这不是兼容进化的运作方式。您可以安全地及时向前 - 非常小心以确保这是真的 - 但不能向后。
-
看我的回答here。
标签: java matlab java-8 java-7 nosuchmethoderror