0

如何通过它在 OSGI 中的名称获取给定类的类加载器?该类在另一个包中声明,并且可能不会被导出。

4

2 回答 2

3

这基本上是不可能的,因为一个类的名称不足以唯一标识它。多个模块可能包含同名的类;这是任何提供模块隔离的模块系统的必然属性。

事实上,在“普通”Java 中这在理论上也是不可能的,因为类的标识由它的完全限定名称和它的 ClassLoader 组成。因此,您要问的是如何仅在给定另一半的情况下获得类的一半身份。

如果您确实知道哪个包/模块包含该类,那么您可以从该包中加载该类,Bundle.loadClass("Foo")并从您可以调用的 Class 对象中加载该类getClassLoader()

于 2013-01-28T12:48:04.707 回答
0

为什么要从另一个包中加载类?更简洁的方法是在包含它的包中实例化类并将其作为服务发布。或者,如果您需要多个实例,您可以将工厂注册为服务。

于 2013-01-29T09:30:29.090 回答