ConCurentHashMap没有keyset()方法,这怎么可能呢?
我正在调试从Matlab
调用的Java
代码,并获得异常:
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 8中,ConcurrentHashMap.keySet()
返回类型已更改。
在Oracle JDK 7中:
public Set<K> keySet() {
Set<K> ks = keySet;
return (ks != null) ? ks : (keySet = new KeySet());
}
在Oracle JDK 8中:
public KeySetView<K,V> keySet() {
KeySetView<K,V> ks;
return (ks = keySet) != null ? ks : (keySet = new KeySetView<K,V>(this, null));
}
public static class KeySetView<K,V> extends CollectionView<K,V,K>
implements Set<K>, java.io.Serializable {
相关文章