簡體   English   中英

Java靜態嵌套類與頂級類

[英]Java static nested class vs top level class

我對何時創建Java類感到困惑:

  • 靜態嵌套類
  • 同一包中的頂級課程
  • 另一個包中的頂級類

例如

class School {
    static class Grade {
        static class Class {
            static class Student {
            }
        }
    }
}

這在邏輯上是好的設計嗎? 它將對象放在邏輯層中。 如果類不是以這種方式嵌套的,則邏輯層會污染名稱空間。 一個學生可以去別的地方。 為學生創建軟件包會更好嗎?

該結構應嵌套還是展平?

我認為:展平。 因為學生不會永遠留在同一個班級。

展平。 這看起來有點像您已經將實例封裝的思想與名稱空間混為一談了。 School實例可能包含許多對Student的引用,但是沒有理由將Student 類型歸入School類型。

學生可能意味着學生在其他地方穿衣服。

除了學生以外, 學生無所求 它不應該與衣服無關。

如果我們為他們創建一個程序包,那就更好了。

是的,包是用於組織類型的容器。 除非嵌套類型,否則不應以這種方式使用類型本身:

  1. 與外部類型緊密耦合,以至於它本身就毫無意義。

  2. 是一種常見概念,以特定於外部類的方式體現出來。 例如, Map.Entry適合作為嵌套的靜態類型(接口),因為“ entry”是一個通用概念,並且這種特定類型的條目僅在處理地圖時才相關。

  3. 僅在其外部類中使用,並且在其外部不可見(或至少在包裝外部不可見)。

當您想從其他類中“隱藏”它們的代碼,或者想將該代碼與封閉類相關聯時,嵌套的靜態類通常很好。

在您的示例中或當它們相當大時(例如,超過100-200行),它們通常不用於多層封裝,因為它們變得難以維護。 在這種情況下,您最好使用軟件包。

早期的StackOverflow問題以及Java Tutorial的“ 嵌套類”部分中,可以找到兩種類型的嵌套類(靜態和非靜態,也稱為內部 )的概述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM