考虑我X
在包中的 java 编译单元中使用了一个类型,foo.bar
并且X
没有在编译单元本身中定义,也没有直接导入。java编译器X
现在如何有效地解析?有几种可能X
存在的地方:
X
可能通过星形导入导入a.b.*
X
可能与编译单元位于同一包中X
可能是一种语言类型,即驻留在java.lang
我看到的问题尤其是(2.)。由于X
可能是包私有类型,因此甚至不需要X
驻留在名为X.java
. 因此,编译器必须查看类路径的所有条目并搜索包中的任何类foo.bar
,然后必须读取包中的每个类foo.bar
以检查是否X
包含。
这听起来非常昂贵。特别是当我只编译一个文件时,编译器必须读取几十个类文件才能找到一个类型X
。如果我使用大量星形导入,则必须对很多类型重复此过程(当然,类文件不会被读取两次)。
那么是否建议从同一个包中导入类型以加快编译过程?或者有没有更快的方法来解决X
我找不到的未导入类型?