缺少依赖项的类的 Java getDeclaredFields

Max*_*vdw 5 java reflection field bukkit

我在获取缺少/未使用特定依赖项的对象的声明字段时遇到问题。

Field[] fields = OBJECT.getClass().getDeclaredFields();
Run Code Online (Sandbox Code Playgroud)

NoClassDefFoundError当该对象导入缺少的类时抛出 a 。

我想这样做的原因是为了 Bukkit 插件。我想获取缺少依赖项的插件实例的字段(它们未使用,但插件可以启动)。

在运行时,该插件将检查所需的依赖项是否存在,并根据情况加载这些特定字段。

我想到的可能的解决方案:
1)虚拟创建缺少的类+包,然后使用 ASM 重试。但我真的不知道该怎么做。

问候,
马克西姆

Den*_*s C 0

为什么你应该关心字段而缺少依赖项?

如果发生这种情况,该类在运行时就不应该有实例。我认为 JRE 不允许创建其字段缺少类的对象实例。

如果您阅读 getDeclaredMethods,它可能会有意义。

ASM / BCEL 是一个很好的方向,但不能虚拟地创建缺失的类(因为你不会知道他们是谁)。您可以使用它们来读取/解析“类文件”以解码其签名(即不使用类加载器的 getDeclaredFields)。