Paths.get()/Path.of()在升级到Java16时抛出NullPointerException

从 Java 15 升级到 Java 16 时,由于空指针异常,我的一些单元测试开始失败。该问题是由传递给 Paths.get() api 的空值引起的。Java 16 中发生了什么变化以使其成为错误?

我正在使用 OpenJDK 版本 16.0.2 并在 macos 上运行。

回答

从 Java 16 开始,内部调用 Path.of() 的 Paths.get() 的实现现在明确要求“第一个”路径元素为非空。

这是对 Java 15 的实现更改,但与规范一致。java.nio.files 的 javadoc 包声明“除非另有说明,否则将空参数传递给此包中任何类或接口的构造函数或方法将导致抛出 NullPointerException。”

可以考虑和改进此实现更改,因为它将不再隐藏出现在文件系统路径中的字符串值“null”,这可能不是预期的结果。

在这种情况下,单元测试由于未正确初始化的模拟对象而中断。

  • 只是补充一点,这是第一个参数为空时的极端情况。JDK 16 更改的发行说明在这里:https://www.oracle.com/java/technologies/javase/16-relnotes.html#JDK-8254876

以上是Paths.get()/Path.of()在升级到Java16时抛出NullPointerException的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>