パッケージのX
Java コンパイル ユニットで型を使用し、コンパイル ユニット自体で定義されておらず、直接インポートされていないことを考慮してください。Javaコンパイラはどのように効率的に解決しますか? 存在する可能性がいくつかあります。foo.bar
X
X
X
X
スターインポート経由でインポートされる可能性がありますa.b.*
X
コンパイル単位と同じパッケージに存在する可能性がありますX
言語タイプである可能性があります。つまり、次の場所に存在しますjava.lang
私が見る問題は特に(2.)です。はパッケージ プライベート タイプである可能性があるため、という名前のコンパイル ユニットに存在するX
必要さえありません。したがって、コンパイラはクラスパスのすべてのエントリを調べて、パッケージ内のクラスを検索する必要があります。次に、パッケージ内のすべてのクラスを読み取って、が含まれているかどうかを確認する必要があります。X
X.java
foo.bar
foo.bar
X
それは非常に高価に聞こえます。特に、単一のファイルのみをコンパイルする場合、コンパイラは type を見つけるためだけに数十のクラス ファイルを読み取る必要がありますX
。多くのスター インポートを使用する場合、この手順を多くの型に対して繰り返す必要があります (もちろん、クラス ファイルを 2 回読み取ることはありません)。
では、コンパイル プロセスを高速化するために、同じパッケージから型もインポートすることをお勧めしますか? または、見つけられなかったインポートされていない型を解決するためのより高速な方法はありX
ますか?