JAVA兼容低版本JDK的正确编译方式
2015-12-08 20:59
363 查看
虽然使用高版本的JDK可以通过指定编译source和target参数来兼容低版本JDK,但只是class文件格式上的,如果引用了高版本JRE库中某些方法一样会再低版本的JDK上报错;典型的例子就是java.util.concurrent.ConcurrentHashMap.keySet()这个方法!
用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
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
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统