我目前正在使用正常运行的代码,但是我正在与之交互的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