2012-11-27 18 views
3

我實施一個系統,我有一個名爲接口「的MyMethod」(名稱是任意的),以及大量的小班正在實施這種方法(特別是覆蓋它的「呼叫」法),和我使用多態將這些實例創建爲列表。多繼承類,他們必須在單獨的文件?

的事情是,因爲我有很多實現方式,它更容易把這些類在同一個Java文件(MyMethod.java)這些小班的,就像這樣:

public interface MyMethod { 
    public String call(foo param1, bar param2) throws SQLException, IOException; 
} 

class FooMethod1 implements MyMethod { 
    @Override 
    public String call(foo param1, bar param2) throws SQLException, IOException { 
     //Do Something 
    } 
} 

class FooMethod2 implements MyMethod { 
    @Override 
    public String call(foo param1, bar param2) throws SQLException, IOException { 
     //Do Something Different 
    } 
} 

然而,把這些類放在同一個文件中,雖然整潔,似乎我反對在Java中應該做的事情。

是否還好有相同的文件,這些類?或者我應該將它們分別移至單獨的文件中?

感謝

+1

我不明白爲什麼這是值得downvoting。我認爲這對於一個新手來說實際上是個好問題......好吧,也許他本人可以在公約文檔中找到它,但確實如此:最佳實踐和慣例多久一次? – Fildor

回答

6

是的,它是確定把幾包私有類在同一個文件。

的JLS的有關部分是§7.3

CompilationUnit: 
    PackageDeclaration[opt] ImportDeclarations[opt] TypeDeclarations[opt] 

TypeDeclarations: 
    TypeDeclaration 
    TypeDeclarations TypeDeclaration 

正如你可以看到,編譯單元可以具有若干類型聲明(或零)。 JLS的另一個相關部分是§7.6。它解釋說,從編譯單元的外部訪問的類型聲明之間的相關性,編譯單元的文件名:

當且僅當包存儲在文件系統(§7.2),主機 系統可以選擇執行,這是一個編譯時 錯誤如果一個類型不是在文件中找到下一個的 類型名加擴展名構成名稱的限制(如的.java或.jav)如果任一 的以下是對的:

  • The類型在聲明類型的其他編譯單元中由代碼引用。

  • 該類型聲明爲public(因此可從其他包中的代碼訪問 )。

該限制意味着必須有以每 編譯單元至多一個這樣的類型。此限制使Java編譯器 可以輕鬆地在包中找到指​​定的類。在實踐中,許多程序員 選擇把每一類或接口類型在其自己的編譯 單元,無論它是否是公共的還是由代碼在其他 編譯單元引用。

很明顯,您的方法不是針對Java並且完全沒問題。然而,當心你的MyMethod實現可能無法使用的MyMethod.java編譯單元之外,這取決於編譯器實現。雖然,無論是的javac也不的Eclipse編譯器似乎與這個問題...

+0

啊好吧謝謝:) – MasNotsram

相關問題