簡體   English   中英

用於創建內部 class 的新實例的 Java 語法的起源?

[英]Origin of Java syntax for creating new instance of an inner class?

我很好奇在給定 Java 中的外部 class 實例的情況下,實例化內部 class 的語法選擇。

語法是:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

但為什么不是:

OuterClass.InnerClass innerObject = new outerObject.InnerClass(); 

前者似乎暗示 new 是與 class 直接關聯的方法或運算符,但我的理解是情況並非如此(與 C++ 不同)?

后者對我來說意味着類型名稱是outerObject.InnerClass - 而實際上類型名稱只是InnerClass (或OuterClass.InnerClass ,這也是合法的)構造outerObject引用的實例相關。

就我個人而言,我不喜歡 Java 首先做嵌套類的方式,我同意它看起來有點奇怪,但我明白為什么會這樣做。

還有一個原因。

new o.C(); 

有兩種可能的含義。 這可能意味着在外部 object o 的上下文中創建內部 class C o 它也可能是創建一個 class ,其完全限定名稱為o.C 這種模棱兩可是有問題的,特別是因為兩種解釋可能同時有效。

內部 class 在所有方面都是外部 class 的固有部分的子集。 內部 class 可以訪問所有外部類的成員,就好像它們是一個一樣。 同樣,(非static )內部 class 的實例必須是外部 class 實例的內在部分。 它不能單獨存在。 您可以將其與無法使用MyClass.wyVariable訪問非靜態變量或 function 進行比較。

這提出了哪種方式是表示這種關系的最語義正確方式的問題。

OuterClass.InnerClass innerObject = new outerObject.InnerClass();

... 將(語義上)斷言 InnerClass 以某種方式是InnerClass的屬性,一旦獲取,就可以在 outerObject 的outerObject之外的世界中自由outerObject 在這種情況下, new的沒什么特別的。

而是 InnerClass 是InnerClass的一部分,而InnerClass實例必須是OuterClass實例OuterClass

上面的語法表示InnerClass (class 本身)是OuterClass某些實例的一部分,這在語義上是不正確的。 畢竟只有一個 class InnerClass ,即使這個 class 可能有任意數量的實例。

OuterClass.InnerClass innerObject = new OuterClass.InnerClass();

... 當然,對於非static內部類(在語義上)也不正確,因為它絕不代表內部和外部 class 實例之間的特殊愛和關懷關系。

但是請注意,這種語法對於static內部類來說非常合適,因為它們與外部 class 的任何一個實例都沒有特殊關系。 在其外部 class 內部實例化內部 class 時,它也非常好。

最后,

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

... 象征着更好的關系。 它象征着實例化過程唯一地綁定到單個特定的外部 object,就是這種情況。

暫無
暫無

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

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