2011-06-30 32 views
3

比方說,我有一個Java類A,它需要一個幫助類B。該輔助類僅用於A,沒有其他用途。另外,B不需要以任何方式使用A(不要調用方法或訪問字段)。去哪裏非公開課?

那麼,問題是:放哪裏B

主要有以下幾種選擇:

  1. 靜態嵌套類。在我看來,它只是讓代碼更清晰(更多縮進等)。在相同的源

    public class A { 
        ... 
        private static class B { ... } 
    } 
    
  2. 非公共類。我喜歡這個選項。

  3. 非公開課在單獨的來源。雖然這看起來像這個選項有一點花銷。

    // A.java 
    public class A { 
        ...    
    } 
    
    // B.java 
    class B { 
        ... 
    } 
    

就目前而言,我更喜歡第二個選項。你對此有什麼想法?最佳做法是什麼? 有沒有關於它的權威來源?

+1

此外,讓我們考慮** **乙是相當小的 - 這是很清楚,一個真正的大班級應該得到它自己的源文件,不管它是如何使用的。 – Andy

+0

@Everyone ... B級選項B真的很私密嗎?我認爲他們只有默認範圍(可以被其他類的包使用)。 – SJuan76

+0

@ SJuan76雅,只是默認範圍。 – aps

回答

5

我強烈地爲選項(1)投票。這個想法是,類B只有類A需要,選項(1)是明確表示該意圖的唯一選擇:類B是類A的一部分。

+0

是的,它似乎是除了從類** A **之外強制禁止訪問的唯一選項。 – Andy

1

it對您有幫助嗎?

有沒有嚴重的缺點,但有一定可以找出至少幾個包括:

  • 難以理解 - 尤其是對非經驗的程序員,誰可能很難代碼,增強和維護。
  • 更多的類 - 它肯定會增加應用程序使用的類的總數。對於加載到內存中的每個類,JVM都會爲其創建一個Class類型的對象。可能還有其他一些例程任務,可能需要JVM爲所有額外的類執行任務。如果應用程序使用多個嵌套/內部類(這可能是由於糟糕的設計),這可能會導致性能稍微降低。
  • 由Tools/IDE提供的有限支持 - 嵌套類不享受與頂級類在大多數工具和IDE中獲得的支持相同的支持。有時這可能會刺激開發者。
+0

不幸的是,沒有。本文僅介紹靜態嵌套類,但沒有提供任何關於在所描述的情況下應該使用什麼內容的見解。 – Andy

1

您可以在A.Better封裝中使用靜態嵌套類,因爲嵌套類是一種邏輯分組僅用於一個地方的類的方法。你的助手類是否只包含字段?

+0

我不明白你的意思是「你可以在B中使用靜態嵌套類」。你的意思是「在A內」嗎? – Andy

+0

oh ya,sorry.i意思是A. – aps

+0

關於助手類。實際上,** B **只是擴展了抽象類並實現了它的一個方法(儘管實現相當簡單)。然後** A **電話** B **。 – Andy