ConCurentHashMap没有keyset()方法,这怎么可能呢? [英] How can it be, that ConcurrentHashMap has no keySet() method?

查看:36
本文介绍了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 {

这篇关于ConCurentHashMap没有keyset()方法,这怎么可能呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆