考虑我使用类型 X
在我的 Java 编译单元中来自包 foo.bar
和 X
未在编译单元本身中定义,也未直接导入。 Java 编译器如何解析 X
现在有效率吗? X
有几种可能性可以居住:
-
X
可能通过明星进口进口a.b.*
-
X
可能与编译单元位于同一个包中 -
X
可能是一种语言类型,即驻留在java.lang
中
我看到的问题尤其是(2.)。自 X
可能是包私有(private)类型,甚至不需要 X
驻留在名为 X.java
的编译单元中.因此,编译器必须查看类路径的所有条目并搜索包中的任何类 foo.bar
, 然后它必须读取包 foo.bar
中的每个类检查是否X
包括在内。
听起来很贵。特别是当我只编译一个文件时,编译器必须读取几十个类文件才能找到一个类型 X
.如果我使用大量 star 导入,则必须对很多类型重复此过程(当然,类文件不会被读取两次)。
那么是否建议从同一个包中导入类型以加快编译过程?或者是否有更快的方法来解析未导入的类型 X
我找不到哪个?
最佳答案
That sounds very expensive.
如果编译器那样做,代价会很大。
但实际发生的是,它构建了一个内存数据结构,其中包含类路径、引导类路径和源路径上的所有类名,并将其用于在 javac
运行中编译的所有类中的所有类名解析.
So is it advisable to import also types from the same package to speed up the compilation process? Or is there a faster method for resolving an unimported type X which I was not able to find?
没有,也没有。这几乎没有什么区别。此外,如果您使用编译器的设计用途,这不太可能成为重大瓶颈。
最好以提供最具可读性和可靠性的代码的方式进行导入。
关于java - java编译器如何解析非导入的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24076971/