Java反射-模块

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<ModuleDescriptor.Exports> 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<String> uses = descriptor.uses();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值