[英]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 編寫的。本頁中描述的示例和實踐沒有利用后續版本中引入的改進,並且可能使用不再可用的技術。
在此版本中,內部類可以顯式或隱式聲明 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.