当前位置:   article > 正文

No virtual method keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;_java.lang.nosuchmethoderror: no virtual method key

java.lang.nosuchmethoderror: no virtual method keyset()ljava/util/concurrent

异常信息

java.lang.NoSuchMethodError: No virtual method keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; in class Ljava/util/concurrent/ConcurrentHashMap; or its super classes (declaration of 'java.util.concurrent.ConcurrentHashMap' appears in /system/framework/core-libart.jar)

项目升级,jdk版本又1.7更换为1.8出现了这个异常。

在jdk1.7中,ConcurrentHashMap的keySet()是返回Set<T>类型,

public Set<K> keySet()

而在jdk1.8中 keySet()的返回类型是KeySetView;

public ConcurrentHashMap.KeySetView<K,V> keySet()

然而,我的AndroidStudio中ConcurrentHashMap的keySet()仍旧返回Set。(可能是我的环境没有配置好)

在编译的字节码中keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView 需要的类型与实际类型不符合keySet()Ljava/util/concurrent/ConcurrentHashMap$Set。

所以,使用父类声明,调用时候可以有统一的返回类型,解决了这一问题。当然,最好的解决方法还是配置好编译运行环境,使之一致就可以解决问题了。




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/253145
推荐阅读
相关标签
  

闽ICP备14008679号