java - 如何使用Java访问另一个类的私有字段中的私有字段
问题描述
我很清楚,使用反射可以很容易地访问 Java 中的私有字段。如帖子中所示,如何从 Java 中的不同类读取私有字段的值?而且有很多。
要实现这一点,关键的一步是设置可访问性。
Field f = obj.getClass().getDeclaredField("aaa");
f.setAccessible(true);
但就我而言,情况是这样的:
class A{
private B b;
class B{
private String value;
}
}
我想在另一个类中获得 abvalue 的值。当我尝试时,我打算这样做
A obj = createInstanceA();
Field f = obj.getClass().getDeclaredField("b");
f.setAccessible(true);
A.B b = f.get(obj);
Field f2 = b.getClass().getDeclaredField("value");
f2.setAccessible(true);
String value = f2.get(b);
哪个行不通,因为 B 不能从 A 中声明出来。如果不能修改 A 类,我还有其他选择吗?
解决方案
你有这样做,
public class A {
private B b = new B();
class B {
private String value = "String";
}
}
public class ClassB {
public static void main(String args[]) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
A obj = new A();
Field f = obj.getClass().getDeclaredField("b");
f.setAccessible(true);
A.B b = (B) f.get(obj);
Field f2 = b.getClass().getDeclaredField("value");
f2.setAccessible(true);
String value = (String) f2.get(b);
System.out.println(value);
}
}
您缺少的是 setAccessible(true) 到内部类字段。
推荐阅读
- api - 通过 API 修改 Github 配置文件但出现“找不到消息”错误
- angular - Typescript获取对象数组中两列值的数组
- google-apps-script - JSON.stringify.replace 用于更新使用 Gmail 草稿作为模板的邮件合并代码
- c# - 解析json时如何将字符串添加到集合中
- node.js - 如何根据与来自服务器的 id 匹配的对象 ID 显示对象
- python - jupyter 中的 %matplotlib notebook 魔术命令只能间歇性地工作
- ruby-on-rails - Ruby on Rails Active Record Bank 数据库“统一”
- matlab - 不确定如何使用“ODE45”命令修复错误
- python - Python,Django:有没有办法在一个模板中编辑多个数据集
- python - Python,从基本列表和子列表长度列表创建列表列表