问题标签 [java-16]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - IntelliJ JDK 16 抢先体验——成功了吗?工具.jar
有没有人通过 IntelliJ 使用 JDK 16 ( https://jdk.java.net/16/ ) 早期访问版本取得任何成功?
我能够使用 JDK 15 早期访问版本,但是当我尝试 JDK 16 时,我收到一条错误消息:
我所做的所有研究都表明 JDK 将 tools.jar 存储在 path/to/jdk-16/lib 文件夹中。问题是,JDK 15 包中也不存在 tools.jar,但 JDK 15 工作正常。
如果有人对如何解决此问题有任何线索,我将不胜感激。我还在尝试,如果我弄明白了,我会更新这篇文章。
提前致谢。
java - 为什么不使用自定义构造函数推断变量记录组件?
尝试一些带有record
和记录组件的代码。我正在使用可变稀有组件,并在自定义构造函数上遇到编译时错误。
我很想了解的是,在没有为初始化提供任何组件的情况下,当通过另一个自定义构造函数调用类似的构造函数时,如何推断出类似的构造函数。
java - 使用 GSS 和通道绑定连接到 LDAPS
我正在尝试在以域用户身份登录的 Windows 计算机上使用 GSS 绑定到 Active Directory 服务器。通常,这可以正常工作。但是在执行签名和绑定时
GSS 无法绑定。根据https://bugs.openjdk.java.net/browse/JDK-8245527,JDK 16(b18)中添加了此功能,但我无法成功绑定失败并显示错误消息
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090346: LdapErr: DSID-0C090595, comment: AcceptSecurityContext error, data 80090346, v3839
其他相关细节:
我的公司有 3 个域控制器,每个都返回相同的错误。它们当前设置为 value=1(当支持时),尽管 value=2(总是)具有相同的效果。
我相当确定我的项目使用的是 JDK 16 build 20。
使用用户名和密码绑定时,一切都按预期工作。
此外,通过 LDAP(而不是 LDAPS)的绑定适用于 GSS。
关键组合是 GSS + LDAPS。
编辑 我在 JDK 15.0.1.9 中得到与在 JDK 16 中相同的行为。这让我认为该功能在 JDK16b20 中没有完全实现,但是在检查包含的源代码后,我可以看到代码的添加位置。
下面是用于连接服务器的代码:
如果有人能发现我做错了什么,那将不胜感激。谢谢!
java - 为什么 Java 记录的规范构造函数没有比记录级别更严格的访问权限?
我有一种情况,我希望特定类型的记录实例只能使用同一包内的单独类中的工厂方法创建。这样做的原因是因为在创建记录之前我需要执行大量的验证。
记录旨在成为其验证字段的哑数据载体,但验证不能在记录的构造函数中进行,因为我们需要访问一些复杂的验证器对象才能实际执行验证。
由于将验证器对象传递给记录构造函数意味着它们将构成记录状态的一部分,这意味着我们不能使用记录构造函数来执行记录的验证。
因此,我将验证提取到它自己的工厂中并编写了类似这样的代码(工厂类和同一包中的记录):
无论出于何种原因,上述内容不适用于 IntelliJ 抱怨:
我可以通过使用普通类(它允许单个包私有构造函数)来避免这个问题,但希望更准确地将数据建模为记录。
为什么对记录存在此限制?未来是否有计划取消此限制?
java - Stream.toList() 会比 Collectors.toList() 表现更好吗
JDK 正在引入一个Stream.toList()
带有JDK-8180352的 API 。这是一个基准代码,我试图将其性能与现有的进行比较Collectors.toList
:
结果总结如下:
当然,领域专家的第一个问题是基准测试程序是否正确?测试类在 MacOS 上执行。请让我知道所需的任何进一步细节。
跟进,据我可以从读数中推断出Stream.toList
看起来比Collectors.toList
. 这种理解正确吗?
javascript - java.lang.IllegalAccessError 尝试将嵌入式 javascript 与独立的 nashorn.jar 文件和 Java 16+29(或更高版本)一起使用
我们在一些 ANT 构建文件中使用嵌入的 JavaScript 代码,并在 Java 8+ 中内置了 Nashorn 功能。在 Java 15 中,Nashorn 功能已被删除,因此我们使用独立的nashorn.jar文件对其进行了测试。我们刚刚添加:
<classpath> <pathelement location="<path>/nashorn.jar"/> </classpath>
事情进展顺利。对于 Java 16,这在构建 16+27 中运行良好。
当我运行一个简单的测试 ANT 脚本时,从 java 16+29(及更高版本)开始:
我收到以下错误:
使用 ANT 1.8.4 和 ANT 1.10.5 时。
所以我的问题是:我做错了什么,或者这是我应该报告的 Java 16 后续版本中的错误?任何建议的解决方法?
java - Java 16 的 Stream.toList() 和 Stream.collect(Collectors.toList()) 的区别?
JDK 16 现在包括一个toList()
直接在Stream
实例上的方法。在以前的 Java 版本中,您总是必须使用该collect
方法并提供一个Collector
实例。
新方法显然要输入更少的字符。这两种方法是否可以互换,还是应该注意细微差别?
(这个问题类似于Will Stream.toList() 比 Collectors.toList() 表现更好,但侧重于行为而不是(仅)性能。)
java - 具有 void 返回类型的 switch 表达式
当 switch 分支调用具有 void 返回类型的方法时,有什么方法可以强制对所有枚举值进行详尽检查?硬编码一个 yield 只是为了哄骗编译器要求穷举是非常丑陋的。
这是我当前的模式(句柄方法有 void 返回类型)
我想使用表达式的原因是在添加新枚举值但未处理时会出现编译错误。
java - 为什么 IndexOutOfBoundsException 现在在 Java 16 中有一个带有长索引的构造函数作为参数?
我正在检查 JDK 16 中IndexOutOfBoundsException的实现,我注意到long
引入了一个带有索引的新构造函数:
据我所知,数组索引通常是int
值,这在语言规范第 10.4 节中得到了证实:
数组必须按
int
值索引;short
、byte
或char
值也可以用作索引值,因为它们受到一元数字提升(第 5.6 节)并成为int
值。
尝试使用
long
索引值访问数组组件会导致编译时错误。
知道何时(以及为什么)long
使用此索引构造函数吗?