0

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

这是我正在访问的其他 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);

谢谢你毫驼

4

0 回答 0