java(和其他語言)通過內(nèi)部類支持嵌套類。要使其正常工作,需要編譯器執(zhí)行一些技巧。這是一個例子:
1
2
3
4
5
6
7
8
9
|
public class outer { private int outerint; class inner { public void printouterint() { system.out.println( "outer int = " + outerint); } } } |
在執(zhí)行編譯之前,編譯器會修改它以創(chuàng)建類似的東西:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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 ()); } } |
雖然從邏輯上講,內(nèi)部類是與外部類相同的代碼實體的一部分,但它被編譯為一個單獨的類。因此,它需要編譯器創(chuàng)建合成橋接方法,以提供對外部類的私有字段的訪問。
這個jep引入了巢的概念,其中同一巢的兩個成員(我們的例子中的外部和內(nèi)部)是同窩。為類文件格式nesthost和nestmembers定義了兩個新屬性。這些更改對于支持嵌套類并編譯為字節(jié)碼的其他語言非常有用。
此功能為java.lang.class引入了三個新方法:
- class getnesthost()
- class[] getnestmembers()
- boolean isnestmateof(class)
此功能還需要更改java虛擬機(jī)規(guī)范(jvms),特別是第5.4.4節(jié)“訪問控制”。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://juejin.im/post/5c47f687e51d4503093b5711