1 回答
TA贡献1772条经验 获得超5个赞
ModuleLayer
创建a 时,每个Module
都会映射到 a ClassLoader
。
ModuleLayer
层是从 Configuration 中的模块图和将每个模块映射到 ClassLoader的函数创建的。
AModuleLayer
没有 a 的概念,ClassLoader
因为不能保证每个人Module
都会有相同的ClassLoader
。相反,ClassLoader
与每个人相关联Module
,您可以通过 获得Module.getClassLoader()
。
但是,由于您使用的是1,因此可以保证每个都具有相同的. 这意味着您可以从 中的任何一个中获取 ,并将其视为“的”。ModuleLayer.defineModulesWithOneLoader(Configuration,ClassLoader)
Module
ClassLoader
ClassLoader
Module
ModuleLayer
ClassLoader
ModuleLayer
ModuleLayer layer = parent.defineModulesWithOneLoader(...); ClassLoader loader = layer.modules().iterator().next().getClassLoader();
请注意,如果出现以下情况,这将无法按预期工作:
该
ModuleLayer
是空的(没有Module
S)。iterator().next()
会抛出一个NoSuchElementException
.您创建
ModuleLayer
通孔1defineModulesWithManyLoaders(Configuration,ClassLoader)
每个人
Module
都会有自己的ClassLoader
。您创建了过
ModuleLayer
孔,defineModules(Configuration,Function)
并且每次Function
都不会返回相同的值ClassLoader
。允许任意组合
Module
toClassLoader
。此外,每个人ClassLoader
都可能有不同的父母。这种方法在定义ModuleLayer
s时提供了最大的灵活性。
1. 方法defineModulesWithOneLoader
和defineModulesWithManyLoaders
实际上是defineModules
用于两个可预定义用例的便捷方法;每个Module
都有相同的ClassLoader
,每个Module
都有自己的ClassLoader
,分别。
添加回答
举报