赞
踩
异常信息
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。
所以,使用父类声明,调用时候可以有统一的返回类型,解决了这一问题。当然,最好的解决方法还是配置好编译运行环境,使之一致就可以解决问题了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。