使用reflection加载类,然后在运行时编辑变量

好吧,所以我有一个java文件正在加载另一个类,我希望java文件能够编辑和读取正在运行的类中的变量。

例如:我有一个按钮,按下它时设置一个变量(这是类文件)。 我希望加载此类的java文件能够看到变量的新值读取它,设置它并执行所需的任何操作。 我希望设置的新值显示在正在运行的java类中。

这是我到目前为止所尝试的,但是当我尝试编辑像获取baseX这样的值时,它不会出现在正在运行的类上。 此外,当我在运行类上执行操作时,baseX值应该更改,但是当我更改它们时,东西不会打印到屏幕上。 就好像reflection无法在运行时读取内容。 那是什么?

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? 如果我只是想调用一个方法而不是获取值呢? 或者如果我想添加自己的方法/代码怎么办?

尝试这个:

 public class Client { public Object baseX = new Object(); public boolean loggedIn; } ----- public class Main { public static void main(String[] args) throws Exception { 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("Logged in!"); System.out.println(baseX.get(instance)); } else { System.out.println("NOT Logged in!"); System.out.println(loggedin); loggedIn.setBoolean(instance, true); System.out.println(loggedIn.getBoolean(instance)); } //} } }