gpt4 book ai didi

java - 使用 Javassist 读取变量的值

转载 作者:行者123 更新时间:2023-11-30 04:14:57 26 4
gpt4 key购买 nike

我使用 Javassist 来获取类上的字段,使用以下代码:

for (CtField ctf : ctclass.getDeclaredFields()) {
System.out.println(ctf.getName());
}

因此,我正在访问的类的所有变量都显示在屏幕上,效果很好。

我想知道是否可以访问这些变量中的任何一个的值?

感谢您的帮助!

最佳答案

获取这些变量值的唯一方法是如果您有一个想要获取其值的对象实例(因为不同的实例可能有不同的值)。

Object instance = ...
...
for (CtField ctf : ctclass.getDeclaredFields()) {
Field f = instance.getClass().getDeclaredField(ctf.getName());
f.setAccessible(true);
Object value = f.get(instance);
}

如果您尝试访问静态字段,则不需要该实例,只需在上面的代码中执行 f.get(null) 即可。

此外,如果您将其与 java 检测或类似的东西一起用于某种分析,并且您没有正在检查的对象的任何实例,则可行的策略是添加 static 字段,它是每个类的实例的 Collection(使用 javassist),然后转换所有构造函数(使用 insertAfter)以添加 this到那个领域。然后,您可以在我的示例中使用相同的反射方法从您关心的每个类中获取这个新字段,从而您将拥有对所有实例的引用。

关于java - 使用 Javassist 读取变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618718/

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