Java JDK11基于嵌套的访问控制的实现
Java(和其他语言)通过内部类支持嵌套类。要使其正常工作,需要编译器执行一些技巧。这是一个例子:
public class Outer { private int outerInt; class Inner { public void printOuterInt() { System.out.println("Outer int = " + outerInt); } } }
在执行编译之前,编译器会修改它以创建类似的东西:
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()); } }
虽然从逻辑上讲,内部类是与外部类相同的代码实体的一部分,但它被编译为一个单独的类。因此,它需要编译器创建合成桥接方法,以提供对外部类的私有字段的访问。
这个JEP引入了巢的概念,其中同一巢的两个成员(我们的例子中的外部和内部)是同窝。为类文件格式NestHost和NestMembers定义了两个新属性。这些更改对于支持嵌套类并编译为字节码的其他语言非常有用。
此功能为java.lang.Class引入了三个新方法:
- Class getNestHost()
- Class[] getNestMembers()
- boolean isNestmateOf(Class)
此功能还需要更改Java虚拟机规范(JVMS),特别是第5.4.4节“访问控制”。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
面试官:java ThreadLocal真的会造成内存泄露吗
ThreadLocal,java面试过程中的“钉子户”,在网上也充斥着各种有关ThreadLocal内存泄露的问题,本文换个角度,先思考ThreadLocal体系中的ThreadLocalMap为什么要设计成弱引用2021-08-08利用java、js或mysql计算高德地图中两坐标之间的距离
最近因为工作的需求,需要计算出高德地图中两个坐标的距离,通过查找相关资料发现了多种实现的方法,下面这篇文章主要给大家介绍了关于利用java、js或mysql计算高德地图中两坐标之间距离的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。2017-10-10Spring security 自定义过滤器实现Json参数传递并兼容表单参数(实例代码)
这篇文章主要介绍了Spring security 自定义过滤器实现Json参数传递并兼容表单参数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01
最新评论