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)ModuleClassLoaderClassLoaderModuleModuleLayerClassLoaderModuleLayer
ModuleLayer layer = parent.defineModulesWithOneLoader(...); ClassLoader loader = layer.modules().iterator().next().getClassLoader();
请注意,如果出现以下情况,这将无法按预期工作:
该
ModuleLayer是空的(没有ModuleS)。iterator().next()会抛出一个NoSuchElementException.您创建
ModuleLayer通孔1defineModulesWithManyLoaders(Configuration,ClassLoader)每个人
Module都会有自己的ClassLoader。您创建了过
ModuleLayer孔,defineModules(Configuration,Function)并且每次Function都不会返回相同的值ClassLoader。允许任意组合
ModuletoClassLoader。此外,每个人ClassLoader都可能有不同的父母。这种方法在定义ModuleLayers时提供了最大的灵活性。
1. 方法defineModulesWithOneLoader和defineModulesWithManyLoaders实际上是defineModules用于两个可预定义用例的便捷方法;每个Module都有相同的ClassLoader,每个Module都有自己的ClassLoader,分别。
添加回答
举报
