文档章节

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

ccor
 ccor
发布于 2015/12/08 20:59
字数 275
阅读 3589
收藏 2

虽然使用高版本的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

© 著作权归作者所有

ccor
粉丝 5
博文 17
码字总数 5629
作品 0
海淀
CTO(技术副总裁)
私信 提问
加载中

评论(1)

zhangkehu
zhangkehu
多谢了,对于菜鸟的我,目的已经达到
Unsupported major.minor version 51.0

MyEclipse新导入项目启动时出现这个错误: Caused by: Unsupported major.minor version 51.0java.lang.UnsupportedClassVersionError: com/xxx/LoginAction : Unsupported major.minor ver......

Iuranus
2014/06/12
1K
0
Java JDK 11:现在可以使用所有新功能

删除了CORBA,Java EE和JavaFX支持,但添加了十几个主要新功能 目录 哪里可以下载JDK 11 Java 11 JDK中的新功能 从Java JDK 11中删除了什么 Java Development Kit(JDK)11现已普遍可用,可供...

GuoMengyue
2018/09/26
1K
4
用Xcode7调试 Openjdk7的方法

笔者目前使用的Mac版本是10.10,配置好必要信息以后就开始编辑,结果错误满屏。简单看过之后发现是编译C文件的时候参数有误,于是查了一下,才知道是LLVM版本太新,不兼容低版本的一些编译参...

小欣妹妹
2017/11/02
11
0
Oracle 为 OS X 发布 Java 开发工具

2010年末的时候,苹果宣布终止对OS X的Java支持,当时乔布斯表示苹果的Java版本总是比Sun/Oracle发布落后,导致苹果比其他所有平台的Java版本都要老,所以继续支持没 有意义了。之后过了几周...

红薯
2012/04/27
2.1K
9
JDK版本错误:Unsupported major.minor version 51.0 / 52.0

java.lang.UnsupportedClassVersionError: com/zaxxer/hikari/HikariConfig : Unsupported major.minor version 51.0 JDK版本的问题,比如本机的JDK为1.6,但是项目编译时用的JDK为1.7那么就......

叶枫啦啦
07/24
13
0

没有更多内容

加载失败,请刷新页面

加载更多

ERC-777以太坊新代币标准解读

ERC777是一个新的高级代币标准,可以视为ERC20的升级版本,因此它解决了ERC20以及ERC223存在的一些问题,开发者可以根据自己的具体需求进行选型。 1、使用ERC820进行合约注册 有别于ERC20的自...

汇智网教程
今天
6
0
代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
14
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部