- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个项目,我正在用 jdk 6、7、8 构建这个项目,我的目标是 1.6
当我构建 jdk 8 时,出现此错误:Undefined reference: java.util.concurrent.ConcurrentHashMap.KeySetView java.util.concurrent.ConcurrentHashMap.keySet()
因为我在该行中有此代码:
final Iterator<CLASS_NAME> itr = hashMap.keySet().iterator();
最佳答案
您应该可以使用 chm.keySet()
与 ConcurrentHashMap
.
在 Java 7 和 Java 8 之间,ConcurrentHashMap.keySet()
方法确实从返回 Set<K>
改变了返回 ConcurrentHashMap.KeySetView<K,V>
.这是协变覆盖,因为 KeySetView<K,V>
工具Set<K>
.它也是源代码和二进制兼容的。也就是说,在 7 上构建和运行时以及在 8 上构建和运行时,相同的源代码应该可以正常工作。 7 上构建的二进制文件也应该在 8 上运行。
为什么是 undefined reference ?我怀疑存在混合了 Java 7 和 Java 8 位的构建配置问题。通常发生这种情况是因为在尝试为以前的版本编译时,-source
和 -target
选项已指定,但 -bootclasspath
未指定选项。例如,请考虑以下情况:
/path/to/jdk8/bin/javac -source 1.7 -target 1.7 MyClass.java
NoSuchMethodError
在运行时抛出。
keySet()
将在对返回
ConcurrentHashMap.KeySetView
的方法的引用中进行编译因为这是在 JDK 8 类库中找到的方法。
-target 1.7
选项使生成的类文件与 JDK 7 和
-source 1.7
兼容。选项将语言级别限制为 JDK 7(在这种情况下不适用)。但结果实际上既不是鱼也不是禽:
类文件格式将与 JDK 7 一起使用,但它包含对 JDK 8 的引用
类库 .如果你尝试在JDK 7上运行这个,当然找不到8中引入的新东西,所以会出现错误。
ConcurrentHashMap<K, V> hashMap = ... ;
final Iterator<CLASS_NAME> itr = hashMap.keySet().iterator();
ConcurrentHashMap<K, V> hashMap = ... ;
final Iterator<CLASS_NAME> itr = ((Map<K, V>)hashMap).keySet().iterator();
/path/to/jdk8/bin/javac -source 1.7 -target 1.7 -bootclasspath /path/to/jdk7/jre/lib/rt.jar MyClass.java
-source
和
-target
选项,指定
-bootclasspath
选项会将所有依赖项限制为在该位置找到的 API,这当然必须与为其他选项指定的版本匹配。这将防止对 JDK 8 的任何无意依赖蔓延到生成的二进制文件中。
--release
已添加。这有效地一次性将源、目标和引导类路径设置为相同的 JDK 平台级别。例如:
/path/to/jdk9/bin/javac --release 7 MyClass.java
--release
时选项,不再需要旧 JDK 的
rt.jar
用于构建目的,如
javac
包括早期版本的公共(public) API 表。
Buffer
的 JDK 9 中。子类。例如,
ByteBuffer.limit(int)
被覆盖,现在返回
ByteBuffer
,而在 JDK 8 及更早版本中,此方法继承自
Buffer
并返回
Buffer
. (在此区域中添加了其他几个协变覆盖。)仅使用
-source 8 -target 8
在 JDK 9 上编译的系统将遇到与
NoSuchMethodError
完全相同的问题.解决方法是一样的:使用
--release 8
.
关于java - "Undefined reference: .. ConcurrentHashMap.keySet()"在 Java 8 中构建时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25705259/
我只是有一个更琐碎的问题。 为什么undefined == undefined 返回true,而undefined >= undefined 为false? undefined 等于 undefine
用PHP 7.2编写套接字服务器。根据Firefox 60中的“网络”选项卡,服务器的一些HTTP响应的第一行随机变为undefined undefined undefined。因此,我尝试记录套接字
在 JavaScript 中这是真的: undefined == undefined 但这是错误的: undefined <= undefined 起初我以为<=运算符包含第一个,但我猜它试图将其转换
在回答这个问题 (Difference between [Object, Object] and Array(2)) 时,我在 JavaScript 数组中遇到了一些我以前不知道的东西(具有讽刺意味的
来自https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/of , Note: thi
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
当我添加 到我的 PrimeFaces Mobile 页面,然后我在服务器日志中收到以下警告 WARNING: JSF1064: Unable to find or serve resource, u
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我是一名优秀的程序员,十分优秀!