OpenJDK开发团队提出的一项建议是将隐藏类添加到Java中,该功能旨在提高基于JVM的语言实现的效率。
根据JDK Enhancement Proposal ,隐藏类是不能被其他类的字节码直接使用的类。 而是,隐藏类旨在由在运行时生成类并通过反射间接使用它们的框架使用。 可以将隐藏类定义为访问控制嵌套的成员,并且其类加载器可能会弱引用。 目前尚无时间表何时可能在Java中出现隐藏的类。
[ 也在InfoWorld上:Java 14中的新功能 ]
在解释计划背后的动机时,该提案指出,许多基于JVM构建的语言实现都利用动态类生成来提高效率和灵活性。 例如,Java的javac编译器在编译时不会将lambda表达式转换为专用的类文件,而是发出字节码以动态生成和实例化类。 同样,非Java JVM语言通常通过使用动态代理动态生成类来实现高阶功能。
这些语言的实现者通常希望动态生成的类成为现有静态生成的类的一部分,并具有动态生成的类所需的属性,例如不可发现性和访问控制。 但是,定义类的标准API并非出于这些目的而设计的。
如果标准API可以定义具有有限生命周期的隐藏的,不可发现的类,那么动态生成类的JDK内部和外部的框架可以改为定义隐藏的类,从而提高JVM语言的效率。
[ 通过InfoWorld的App Dev Report新闻通讯了解软件开发中的热门话题 ]
隐藏类提案的目标包括:
- 使框架能够将类定义为框架的不可发现的实现细节,因此它们不能被其他类链接或通过反射发现。
- 弃用非标准API
misc.Unsafe::defineAnonymousClass
,目的是在将来的版本中将其删除。 - 完全不更改Java语言。
- 支持使用不可发现的类扩展访问控制嵌套。
- 支持非发现类的主动卸载,使框架可以根据需要灵活定义。
From: https://www.infoworld.com/article/3520792/hidden-classes-could-be-coming-to-java.html