我无法获取缺少/不使用特定依赖项的Object的声明字段。
Field[] fields = OBJECT.getClass().getDeclaredFields();
当该对象导入缺少的类时,抛出NoClassDefFoundError
。
我想要这样做的原因是Bukkit插件。我想获取缺少依赖项的插件实例的字段(它们未被使用,但插件可以启动)。
在运行时,插件将检查是否存在所需的依赖项,并根据它将加载这些特定字段。
我想到的可能解决方案:
1)实际上创建缺少的类+包,然后使用ASM再次尝试。但我真的不知道该怎么做。
的问候,
马克西姆
答案 0 :(得分:0)
为什么在缺少依赖项的同时关心字段?
如果它发生,该类应该永远不会在运行时有一个实例。我不认为JRE会允许为它的字段创建缺少类的对象实例。
如果您阅读了getDeclaredMethods,这可能意味着什么。
ASM / BCEL是一个很好的方向,但实际上并没有创建缺少的类(因为你不知道他们是谁)。您正在使用它们来读取/解析"类文件"解码它的签名(即不使用类加载器的getDeclaredFields)。
答案 1 :(得分:0)
首先确保您的目标插件在插件之前加载: 您可以在插件之前强制它加载,将此行添加到plugin.yml文件中:
softdepend:[Pluginname]
Pluginname是你的反射目标插件。 其次,你应该只从这个插件中获取你需要的字段,而不是列出每个字段,但是如果你想获得它的所有字段,而不仅仅是反编译它的代码并制作一个自定义字段getter方法:
<?php
if (ctype_digit($_GET['id'])) {
$deleteId = htmlspecialchars($_GET['id'], ENT_QUOTES);
$delete = "DELETE FROM `posts` WHERE `id` = " . $deleteId;
}
?>