Java:一個文件中的多個類聲明
雖然可以在單一Java 文件中定義多個頂級類,但遵循某些約定是不可或缺的。其中一種約定是,依照 Java 語言規範 (JLS) 的規定,只能將一個類別宣告為公用類別。
術語
沒有特定術語來表示描述這種在單一文件中定義多個類別的技術。與內部類別、巢狀類別或匿名類別不同,這些頂級類別具有不同的範圍以及與其包含檔案的關係。
編譯單元限制
JLS 聲明系統可能會強制限制這些非公共二級類別不能「被包裝的其他編譯單元中的程式碼引用」。這意味著它們不能被視為包私有。
實作
實際上,像 javac 這樣的 Java 編譯器並不嚴格執行此限制。然而,它們確實有一個限制,使得從另一個文件引用頂級類別是非常不受歡迎的,除非它與其所在的文件共享相同的名稱。
例如,考慮兩個Java文件:
public class Foo { // ... }
public class Bar { // ... Baz baz; // Compilation error if compiled separately } class Baz { // ... }
如果 Foo.java 引用了 Baz 但沒有引用 Bar,嘗試獨立編譯 Foo.java 將導致編譯錯誤。
推理
有此限制是因為當一個類別被搜尋時,javac 無法自動決定要搜尋哪個原始檔案從另一個檔案引用。為了解決這個問題,編譯器要求外部類別引用的任何頂級類別必須與包含檔案同名,或者在同名的類別中明確聲明(例如,在上面的範例中,如果 Foo .java 還包含一個類別 Bar)。
後果和最佳實踐
雖然技術上可以利用如果在單個文件中包含多個頂級類,由於上述編譯器限制,通常認為這種做法不好。為了保持可靠的建置流程,建議遵守每個檔案放置一個頂級類別並明確聲明其可見性(公共或包私有)的約定。
以上是單一 Java 檔案中可以存在多個頂層類別嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!