[英]Java static nested class vs top level class
我對何時創建Java類感到困惑:
例如
class School {
static class Grade {
static class Class {
static class Student {
}
}
}
}
這在邏輯上是好的設計嗎? 它將對象放在邏輯層中。 如果類不是以這種方式嵌套的,則邏輯層會污染名稱空間。 一個學生可以去別的地方。 為學生創建軟件包會更好嗎?
該結構應嵌套還是展平?
我認為:展平。 因為學生不會永遠留在同一個班級。
展平。 這看起來有點像您已經將實例封裝的思想與名稱空間混為一談了。 School實例可能包含許多對Student的引用,但是沒有理由將Student 類型歸入School類型。
學生可能意味着學生在其他地方穿衣服。
除了學生以外, 學生別無所求 。 它不應該與衣服無關。
如果我們為他們創建一個程序包,那就更好了。
是的,包是用於組織類型的容器。 除非嵌套類型,否則不應以這種方式使用類型本身:
與外部類型緊密耦合,以至於它本身就毫無意義。
是一種常見概念,以特定於外部類的方式體現出來。 例如, Map.Entry
適合作為嵌套的靜態類型(接口),因為“ entry”是一個通用概念,並且這種特定類型的條目僅在處理地圖時才相關。
僅在其外部類中使用,並且在其外部不可見(或至少在包裝外部不可見)。
當您想從其他類中“隱藏”它們的代碼,或者想將該代碼與封閉類相關聯時,嵌套的靜態類通常很好。
在您的示例中或當它們相當大時(例如,超過100-200行),它們通常不用於多層封裝,因為它們變得難以維護。 在這種情況下,您最好使用軟件包。
在早期的StackOverflow問題以及Java Tutorial
的“ 嵌套類”部分中,可以找到兩種類型的嵌套類(靜態和非靜態,也稱為內部 )的概述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.