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
  • asp之家 软件编程 m.aspxhome.com