簡體   English   中英

使用Java反射庫調用靜態方法

[英]Invoking a static method with java reflection library

我試圖通過java反射庫調用以下靜態方法。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class ah
{
  static void a()
  {
    try
    {
      Client.dU = 10;
      Client.dV = 0;
      Client.dX = true;
      cp.d = 32;
      cp.a(InetAddress.getLocalHost());
      Client.iq = Client.E();
      Client.ir = w.a();
      Client.is = 2019030189;
    }
    catch (UnknownHostException localUnknownHostException) {}
  }
}

我當前的代碼如下

public void invokeInit() throws NoSuchMethodException, SecurityException, IllegalAccessException,
            IllegalArgumentException, InvocationTargetException {
        Class<?> initClass = loader.loadClass("ah");
        Method initMethod = initClass.getDeclaredMethod("a", null);
        initMethod.invoke(null, new Object[] {});
    }

它給我以下錯誤

java.lang.IllegalAccessException: Class org.baiocchi.client.reflection.Game can not access a member of class ah with modifiers "static"
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
    at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296)
    at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288)
    at java.lang.reflect.Method.invoke(Method.java:491)
    at org.baiocchi.client.reflection.Game.invokeInit(Game.java:28)
    at org.baiocchi.client.reflection.Game.getApplet(Game.java:33)
    at org.baiocchi.client.Engine.start(Engine.java:21)
    at org.baiocchi.client.Booter.main(Booter.java:6)

預先感謝您的任何幫助!

java.lang.IllegalAccessException:類org.baiocchi.client.reflection.Game無法使用修飾符“ static”訪問類ah的成員

如果要調用私有方法或其他無法訪問的方法(通常是package private方法,而不是從類的包中調用它),則拋出IllegalAccessException

您可以在Method對象上調用public void setAccessible(boolean flag)以消除此約束:

initMethod.setAccessible(true);

將此對象的可訪問標志設置為指示的布爾值。 值為true表示反射的對象在使用時應禁止Java語言訪問檢查。 值為false表示所反射的對象應強制執行Java語言訪問檢查。

暫無
暫無

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

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