gpt4 book ai didi

java - 使用反射访问成员变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:41 27 4
gpt4 key购买 nike

我有一个类 A,它有一个私有(private)最终成员变量,它是另一个类 B 的对象。

Class A {
private final classB obj;
}

Class B {
public void methodSet(String some){
}

}

我知道 A 类是单例。我需要使用类 B 中的方法“methodSet”设置一个值。我尝试访问 classA 并访问 classA 中的 ClassB 实例。

我这样做:

Field MapField = Class.forName("com.classA").getDeclaredField("obj");
MapField.setAccessible(true);
Class<?> instance = mapField.getType(); //get teh instance of Class B.
instance.getMethods()
//loop through all till the name matches with "methodSet"
m.invoke(instance, newValue);

这里我得到一个异常(exception)。

我不精通Reflection。如果有人可以提出解决方案或指出问题所在,我将不胜感激。

最佳答案

我不确定你所说的“远程”反射是什么意思,即使是反射,你也必须拥有一个对象的实例。

某处你需要获取A的实例。B的实例也是如此。

这是您要实现的目标的工作示例:

package reflection;

class A {
private final B obj = new B();
}


class B {
public void methodSet(String some) {
System.out.println("called with: " + some);
}
}


public class ReflectionTest {
public static void main(String[] args) throws Exception{
// create an instance of A by reflection
Class<?> aClass = Class.forName("reflection.A");
A a = (A) aClass.newInstance();

// obtain the reference to the data field of class A of type B
Field bField = a.getClass().getDeclaredField("obj");
bField.setAccessible(true);
B b = (B) bField.get(a);

// obtain the method of B (I've omitted the iteration for brevity)
Method methodSetMethod = b.getClass().getDeclaredMethod("methodSet", String.class);
// invoke the method by reflection
methodSetMethod.invoke(b, "Some sample value");

}

希望对你有帮助

关于java - 使用反射访问成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12363370/

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