可能重复:
使用反射加载一个类,然后在运行时编辑变量
好的,所以我有一个正在加载另一个类的 java 文件,我希望 java 文件能够从正在运行的类中编辑和读取变量。
例如:我有一个按钮,按下它会设置一个变量(这是类文件)。我希望正在加载此类的 java 文件能够看到变量的新值读取它、设置它并执行任何需要的操作。我希望设置显示在正在运行的 java 类上的新值。
这是我迄今为止尝试过的,但是当我尝试编辑诸如获取 baseX 之类的值时,它不会显示在正在运行的类中。此外,当我在正在运行的类上做一些事情时,baseX 值应该会改变,但是当我改变它们时这些东西不会打印到屏幕上。就好像反射无法在运行时读取东西一样。那么有什么作用呢?
Class c = Class.forName("Client");
for (Method m : c.getMethods()) {
if (m.getName().contentEquals("main")) {
Object[] passedArgs = { args };
m.invoke(null, passedArgs);
}
}
Object instance = c.newInstance();
Field baseX = c.getField("baseX");
Field loggedIn = c.getField("loggedIn");
boolean gotValues = false;
while(!gotValues) {
boolean loggedin = loggedIn.getBoolean(instance);
if(loggedin) {
System.out.println(baseX.get(instance));
} else {
System.out.println(loggedin);
loggedIn.setBoolean(instance, true);
}
}
另外,如果 getter/setter 方法在运行时工作,它们也可以工作,我可以这样做,以便当按下按钮 x 时,屏幕上的变量 y 会发生变化。什么是 Java Bean?另外,如果我只想调用一个方法而不获取值怎么办?或者如果我想添加自己的方法/代码怎么办?