资讯专栏INFORMATION COLUMN

Java反射-模块

gekylin / 2106人阅读

摘要:模块反射教程将解释如何通过反射访问类所属的模块。模块的概念是添加的。模块反射教程将通过下面的章节讨论可以从模块描述符中获得的信息。这是示例代码导出包可以通过反射,方法读取模块的包列表。模块所使用的服务也被称为模块的服务依赖关系。

Java模块反射教程将解释如何通过反射访问Java类所属的模块。
模块的概念是Java 9Java Platform Module System添加的。一个Java模块是一个Java包的集合。因此,每一个类都属于一个包,且每一个包都属于一个模块。
一个Java模块被java.base模块的反射类java.lang.Module 代表。通过这个类可以和Java模块系统交互,获得给定模块的信息或者修改一个模块。本文将覆盖通过反射类Module可以做的一些操作。

获得模块实例

可以通过Class实例获得Module实例,像这样:

Module myClassModule = MyClass.class.getModule();
是命名模块吗?

你可以通过调用Module isNamed()检查一个Module是否代表一个给定名称的模块。这是示例代码:

boolean isNamed = myClassModule.isNamed();
是公开模块吗?

你可以通过调用Module isOpen()方法检查一个模块是否是开放的, 这是示例代码:

boolean isOpen = myClassModule.isOpen();
获得模块描述符

一旦你访问了Module实例,你可以通过getDescriptor()方法访问它的ModuleDescriptor。这是通过getDescriptor()访问模块的ModuleDescriptor的示例代码:

ModuleDescriptor descriptor = myClassModule.getDescriptor();

可以从ModuleDescriptor获得模块的更多描述信息。Java模块反射教程将通过下面的章节讨论可以从模块描述符中获得的信息。

模块名

你可以通过ModuleDescriptor name()方法获得模块名。这是示例代码:

String moduleName = descriptor.name();
导出包

可以通过反射,ModuleDescriptor exports() 方法读取模块的包列表。示例代码如下:

Set exports = descriptor.exports();
是自动配置模块吗?

你可以通过ModuleDescriptor isAutomatic() 方法检查模块是否自动配置模块。示例代码如下:

boolean isAutomatic = descriptor.isAutomatic();
是公开模块吗?

你可以通过ModuleDescriptor isOpen() 方法检查模块是否是开放的,示例代码如下:

boolean isOpen = descriptor.isOpen();
模块中的包

你可以通过反射获得一个给定模块的包列表。这是通过ModuleDescriptor packages() 方法实现的。示例代码如下:

Set packages = descriptor.packages();
使用的服务

你也可以通过反射读取一个Java模块使用的服务。模块所使用的服务也被称为模块的服务依赖关系。你可以通过ModuleDescriptor uses() 方法读取模块服务的依赖。示例代码如下:

Set uses = descriptor.uses();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71700.html

相关文章

  • Java9模块化学习笔记二之模块设计模式

    摘要:但是模块化当中,无法扫描只有模块中可以使用有两种解决方案定义一个专门的资源模块,并使用提供的接口,实现它,并将这个实现注册为服务。有两种方式使用或包名,包名模块名使用运行时动态。 模块设计的原则: 1、防止出现编译时循环依赖(主要是编译器不支持),但运行时是允许循环依赖的,比如GUI应用2、明确模块的边界 几种模块设计: API模块,聚合模块(比如java.base) 可选依赖 两种方...

    李文鹏 评论0 收藏0
  • Java基础-模块系统笔记(1)

    摘要:模块系统的前身是项目。最初,该项目仅仅是为设计实现一个模块系统。随着项目的不断深入,平台对标准模块系统的呼求也日益增长,批准该项目升级为平台的一部分,也能服务于和平台的需求。自定义的配置,仅包含一组指定的模块及其所需的模块。 我的博客 转载请注明原创出处。 序 从Java 9开始,在Java的世界里多了一个叫模块(JSR376)的特性。模块系统的前身是Jigsaw项目。最初,该项目仅...

    learning 评论0 收藏0
  • Reflection:Java反射机制的应用场景

    近期在维护公司项目的时候遇到一个问题,因为实体类中的 set 方法涉及到了业务逻辑,因此在给对象赋值的过程中不能够使用 set 方法,为了实现功能,所以采用了反射的机制给对象属性赋值,借此机会也了解了反射的一些具体用法和使用场景,分以下两点对反射进行分析: 反射的优势和劣势 反射的应用场景 反射的优势和劣势   个人理解,反射机制实际上就是上帝模式,如果说方法的调用是 Java 正确的打开方式...

    浠ラ箍 评论0 收藏0
  • 在运行期通过反射了解JVM内部机制

    摘要:我们找到了许多有趣的工具和组件用来检测状态的各个方面,其中一个就是在运行期通过反射了解内部机制。由于包含多种的实现,就是供具体实现比如必须继承的抽象类。调试器框架是可扩展的,这意味着可以通过继承这个抽象类来使用另一个调试器。 在日常工作中,我们都习惯直接使用或者通过框架使用反射。在没有反射相关硬编码知识的情况下,这是Java和Scala编程中使用的类库与我们的代码之间进行交互的一种主要...

    crossea 评论0 收藏0
  • 最最最常见的Java面试题总结——第二周

    摘要:与都继承自类,在中也是使用字符数组保存字符串,,这两种对象都是可变的。采用字节码的好处语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。 String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性...

    yearsj 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<