JAVA兼容低版本JDK的正确编译方式

╄→尐↘猪︶ㄣ 提交于 2019-11-27 13:26:31

虽然使用高版本的JDK可以通过指定编译source和target参数来兼容低版本JDK,但只是class文件格式上的,如果引用了高版本JRE库中某些方法一样会再低版本的JDK上报错;典型的例子就是java.util.concurrent.ConcurrentHashMap.keySet()这个方法!

import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;

public class T {

	public static void main(String[] args) {
		ConcurrentHashMap<String, String> map = new ConcurrentHashMap<String, String>();
		map.put("hello", "");
		Iterator<String> it = map.keySet().iterator();
		System.out.println(it.next());
		
	}

}

用jdk1.8编译 /jdk1.8/bin/javac -source 1.7 -target 1.7 T.java

用jdk1.7执行 /jdk1.7/bin/java T

会报异常 java.lang.NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView

解决的办法是,编译使用对应的JDK,确保JRE的类库是对应版本。否则在意想不到的地方出现坑!

参考:http://stackoverflow.com/a/25705596

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!