gpt4 book ai didi

java - 如何从 OSGi 运行时环境通过类名字符串加载类?

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:52 25 4
gpt4 key购买 nike

我正在制作一个 bundle 以插入 OSGi 以向用户提供功能:

Usercase: User input the classname string and click "list" button, the corresponding class will be decompiled and show the text on GUI for user.

所以这是我的问题:我只有我的包的类加载器,我怎样才能获得 OSGi 容器类加载器,我可以从整个 OSGi 容器中按名称加载类? (我希望当 OSGi 启动时,它会加载所有的包和所有的类到内存,任何类都可以被 OSGi 容器类加载器加载,如果它真的存在并且能够)

有谁知道如何做这个工作吗?非常感谢示例代码。

最佳答案

我可以看到两种可能对您有帮助的情况。

任何可见类

你可以添加这样的语句

DynamicImport-Package: *

到您的 list ,然后尝试使用

加载类
Class.forName("com.company.class");

所有类,是否导出

如果您真的需要找到每个可用的类,我不确定您为什么想要这个,但您可以尝试询问每个包是否“知道”给定的类。由于在这种情况下您最终可能会得到多个具有相同名称的类,因此您需要选择正确的类。

你可以做类似的事情

private List<Class<?>> findClass(BundleContext context, String name) {
List<Class<?>> result = new ArrayList<Class<?>>();
for (Bundle b : context.getBundles()) {
try {
Class<?> c = b.loadClass(name);
result.add(c);
} catch (ClassNotFoundException e) {
// No problem, this bundle doesn't have the class
}
}
return result;
}

关于java - 如何从 OSGi 运行时环境通过类名字符串加载类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11010763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com