Java JDK11基于嵌套的访问控制的实现
作者:Spring中文网 时间:2021-07-11 10:02:05
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节“访问控制”。
来源:https://juejin.im/post/5c47f687e51d4503093b5711
标签:Java,JDK11,嵌套,访问
0
投稿
猜你喜欢
C# List介绍及具体用法
2021-09-15 07:59:14
Android测试方法总结
2022-07-27 08:02:41
Netty分布式ByteBuf使用命中缓存的分配解析
2023-08-31 11:33:49
java 基础之final、finally和finalize的区别
2023-08-01 04:44:49
对指定的网页进行截图的效果 C#版
2022-07-04 03:14:18
详解利用SpringCloud搭建一个最简单的微服务框架
2023-08-21 04:24:32
基于springboot+vue实现垃圾分类管理系统
2023-04-17 08:39:11
TabLayout标题文字不显示的解决操作
2023-02-19 18:34:48
C#使用dynamic类型访问JObject对象
2022-03-01 13:05:28
Java线程生命周期图文详细讲解
2022-07-17 05:22:32
java基础-数组扩容详解
2022-05-24 00:34:58
SpringBoot整合Log4j2及配置步骤
2023-10-27 10:50:16
解决idea每次新建项目都需要重新指定maven目录
2022-12-25 17:39:52
Netty分布式Server启动流程服务端初始化源码分析
2021-07-12 12:35:19
SpringBoot数据访问自定义使用Druid数据源的方法
2023-01-10 16:29:38
C#后端接收form-data,创建实体类教程
2023-08-23 21:07:57
如何使用Java redis实现发送手机验证码功能
2023-11-26 17:25:00
Java如何解析html中的内容并存到数据库详解
2023-11-29 05:08:32
Android 自定义TextView实现文本内容自动调整字体大小
2023-11-07 11:47:40
Java中try、catch的使用方法
2021-11-08 00:48:12