簡體   English   中英

使用反射加載類,然后在運行時編輯變量

[英]Load a class using reflection then edit the variables during runtime

好的,所以我有一個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? 如果我只想調用一個方法而不獲取值怎么辦? 或者,如果我想添加自己的方法/代碼怎么辦?

嘗試這個:

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));
      }
    //}

  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM