簡體   English   中英

我不了解內部類的一些事情

[英]Something I don't understand about Inner Classes

如果您想閱讀全文https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.ZFC35FDC70D5FC69D2693883A82EZ5A ,請查看以下鏈接

那里寫着本地類和內部類共享它們都不能定義或聲明任何 static 成員,也不能在塊內聲明接口,但是當我嘗試提供的代碼作為示例時,編譯的代碼沒有錯誤。 我確實寫了自己的例子,就像

public class A { 
    class B { 
        public static String static-field = ...; 
        public static void Method() {...}
    }
}

並且這段代碼也被編譯沒有錯誤。 我有點困惑。 static 方法和字段是否可以在內部類和本地類中聲明?

您很可能使用 JDK 16 或更高版本進行編譯。 您鏈接的文檔僅適用於 Java 8 並且在網站的開頭也已被調用。

Java 教程是為 JDK 8 編寫的。本頁中描述的示例和實踐沒有利用后續版本中引入的改進,並且可能使用不再可用的技術。

查看Java JDK 16 中的語言更改

在此版本中,內部類可以顯式或隱式聲明 static 的成員。

這是允許的,因為Java 16

雖然 JEP 384 允許 static 本地類和接口,但它並沒有放松對 static 內部類的成員類和接口的限制。 內部 class 可以在其方法主體之一內聲明 static 接口,但不能作為 class 成員。

作為自然的下一步,JEP 395 進一步放寬了嵌套限制,並允許在內部類中聲明 static 類、方法、字段等。

正如您分享的鏈接中提到的,它主要用於 Java 8,我已經用 java 8 編譯了代碼,並且彈出了這個錯誤:

javac src/uk/Java8StaticTest.java -d ttarget/
src/uk/Java8StaticTest.java:7: error: Illegal static declaration in inner class Java8StaticTest.B
        public static String staticField = "";
                             ^
  modifier 'static' is only allowed in constant variable declarations
src/uk/Java8StaticTest.java:9: error: Illegal static declaration in inner class Java8StaticTest.B
        public static void Method()
                           ^
  modifier 'static' is only allowed in constant variable declarations
2 errors

正如@Rob Spoor 所述,自 Java 16 起允許這樣做

暫無
暫無

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

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