在Java 16 之前的版本中,嘗試定義靜態方法非靜態內部類別中會導致編譯器錯誤。例如,以下程式碼片段將失敗:
<code class="java">public class Foo { class Bar { static void method() {} // Compiler error } }</code>
非靜態內部類別與其封閉類別的實例相關聯。內部類別的每個實例都有對其封閉類別實例的隱藏引用。這意味著內部類別中的靜態方法必須維護對封閉類別的引用,這違反了принцип изоляциии интерфейса.
要在內部類別中定義靜態方法,您必須將內部類別聲明為靜態。靜態內部類別沒有對其封閉類別的實例的隱式引用。因此,它可以定義靜態方法:
<code class="java">public class Foo { static class Bar { // now static static void method() {} } }</code>
以上是為什麼在版本 16 之前的 Java 中不能在非靜態內部類別中定義靜態方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!