Java JDK11基於嵌套的訪問控制

Java(和其餘語言)經過內部類支持嵌套類。要使其正常工做,須要編譯器執行一些技巧。這是一個例子:java

public class Outer {
    private int outerInt;

     class Inner {
       public void printOuterInt() {
         System.out.println("Outer int = " + outerInt);
       }
    }
}
複製代碼

在執行編譯以前,編譯器會修改它以建立相似的東西:spa

public class Outer {
  private int outerInt;

  public int access$000() {
    return outerInt; 
  }

}

class Inner$Outer {

  Outer outer;

  public void printOuterInt() {
    System.out.println("Outer int = " + outer.access$000());
  }
}
複製代碼

雖然從邏輯上講,內部類是與外部類相同的代碼實體的一部分,但它被編譯爲一個單獨的類。所以,它須要編譯器建立合成橋接方法,以提供對外部類的私有字段的訪問。code

這個JEP引入了巢的概念,其中同一巢的兩個成員(咱們的例子中的外部和內部)是同窩。爲類文件格式NestHost和NestMembers定義了兩個新屬性。這些更改對於支持嵌套類並編譯爲字節碼的其餘語言很是有用。get

此功能爲java.lang.Class引入了三個新方法:編譯器

  • Class getNestHost()
  • Class[] getNestMembers()
  • boolean isNestmateOf(Class)

此功能還須要更改Java虛擬機規範(JVMS),特別是第5.4.4節「訪問控制」。虛擬機

相關文章
相關標籤/搜索