我目前有正常运行的代码,但是我正在与之交互的模块的更新导致了问题。
这是我正在访问的其他 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);
谢谢你毫驼