Since main is static, is it possible to access instanceOfB in order to access the value of _nonStaticInt?
“没有.”使用Java Reflection API无法访问局部变量(是否在静态方法中).反射仅适用于类型级别,而不适用于字节码级别2.
对相关问题的陈述理解是正确的;非静态(实例)字段的反射访问逻辑上需要一个实例.也就是说,问题不在于反映B类型,问题在于获取B实例(分配给局部变量)以进行反思.
要做到这一点,B实例必须以某种方式“流血” – 例如分配给静态字段或作为参数传递给main1中的方法/构造函数 – 以便稍后可以将其与反射一起用作访问实例成员的对象.
最干净的方法可能是将B实例向下传递到适当的上下文(或“DI”),也许是IoC的助手……并且可能会改变类型以避免完全使用反射.
1另一种“流血”B实例的可能方法是附加调试器并检查/使用执行框架的主要方法中的局部变量 – 但这听起来像是试图用球杆拍打飞行.
2即使是像BCEL / ASM这样的工具也无法在执行主方法时立即提供帮助.相反,它将用于解构方法,添加所需的钩子/代码以“流血”或使用创建的实例,然后构造一个要执行的修改方法.