Java:从声明为字段的类中调用方法

时间:2013-10-29 11:56:54

标签: java reflection

我目前正在使用正常运行的代码,但是我正在与之交互的mod的更新导致了问题。

这是我正在访问的其他mods代码的模型。

IHandler.class

public abstract interface IHandler
{
  public abstract int addValue(int value);
}

旧:Item.class

public final class Item
{
  public static IHandler handler;

  public static int addValue(int value)
  {
    handler.addValue(value);
  }
}

他们使用了Item.addValue(value);在他们的代码中

我正在使用的代码的模拟(使用上面的旧代码)

Class<?> itemclass = Class.forName("Item");
Method addValue = itemclass.getDeclaredMethod("addValue", Integer.TYPE);
addValue.invoke(item.newInstance(), 25);

我遇到的问题是Item.class已经改变。

新:Item.class

public final class Item
{
  public static IHandler handler;
}

他们现在使用Item.handler.addValue(value);在他们的代码中

删除了方便的包装后,我似乎无法再访问该方法了。 我不知道如何获取处理程序的实例,所以我可以再次调用该方法。 这是我承认失败之前的所在:)

Class<?> itemclass = Class.forName("Item");
Field handler = itemclass.getDeclaredField("handler");
Class<?> iHandler = handler.getType();
Method addValue = iHandler.getMethod("addValue", Integer.TYPE);
addValue.invoke(item.newInstance(), 25);

我确信它很简单,我忽略了。

编辑: 知道这是我看到的简单的东西:) addValue.invoke(handler.getValue(null),25);

Thankyou millimoose

0 个答案:

没有答案