如果我使用Java 8和javac -source 1.7 -target 1.8编译您的代码,然后使用Java 7运行它,则会得到一个
线程“主”中的异常java.lang.NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet()Ljava / util / concurrent / ConcurrentHashMap $ KeySetView; 在stackoverflowt.Test.processing(Test.java:20) 在stackoverflowt.Test.main(Test.java:27)
这是因为字节码看起来像
公共无效处理(); 码: 0:加载_0 1:getfield#4 //字段映射:Ljava / util / concurrent / ConcurrentHashMap; 4:invokevirtual#10 //方法java / util / concurrent / ConcurrentHashMap.keySet :()Ljava / util / concurrent / ConcurrentHashMap $ KeySetView; 7:invokevirtual#11 //方法java / util / concurrent / ConcurrentHashMap $ KeySetView.iterator :()Ljava / util / Iterator; 10:astore_1
并显式引用Java 7中不存在的ConcurrentHashMap $ KeySetView。我在Mac上使用Java 1.7.0_79和1.8.0_45
如果将代码更改为(仅使用地图界面):
private Map<String, Object> map = new ConcurrentHashMap<String, Object>();
那对我有用。字节码看起来像
公共无效处理(); 码: 0:加载_0 1:getfield#4 //字段映射:Ljava / util / Map; 4:invokeinterface#10,1 // InterfaceMethod java / util / Map.keySet :()Ljava / util / Set; 9:invokeinterface#11,1 // InterfaceMethod java / util / Set.iterator :()Ljava / util / Iterator; 14:astore_1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)