为什么要导入像NullPointerException这样的java.lang类?

为什么要导入像NullPointerException这样的java.lang类?,java,Java,报告说: 每个编译单元隐式导入每个公共类型名 在预定义包java.lang中声明,就像声明 导入java.lang.*;出现在每个编译单元的开头 在任何包声明之后立即。因此,所有人的名字 这些类型在每个编译单元中都可以作为简单名称使用 然而,我不时看到从java.lang导入类的代码,比如import java.lang.NullPointerException。这样做有什么好的理由吗 这样做有什么好的理由吗 几乎可以肯定不是。唯一可能的解释是他们在当前包中定义了自己的NullPointerEx

报告说:

每个编译单元隐式导入每个公共类型名 在预定义包java.lang中声明,就像声明 导入java.lang.*;出现在每个编译单元的开头 在任何包声明之后立即。因此,所有人的名字 这些类型在每个编译单元中都可以作为简单名称使用

然而,我不时看到从
java.lang
导入类的代码,比如
import java.lang.NullPointerException。这样做有什么好的理由吗

这样做有什么好的理由吗

几乎可以肯定不是。唯一可能的解释是他们在当前包中定义了自己的
NullPointerException
,不想在当前类中使用它。(你不应该这么做…)

最可能的解释是有人不懂Java

这也可以通过一个IDE来解释,该IDE提出了虚假的导入1。但这应该通过代码评审来发现,所以如果您在已发布的代码库中看到它,这将是潜在的代码质量危险信号

如果代码是由源代码生成器生成的,而不是由人编写的,也可以解释这一点。这是可以原谅的,前提是它不会导致错误代码



1。。。虽然我从未见过IDE为
java.lang
类这样做。

我在开源项目中见过它,比如: