0

現在、コードは機能していますが、使用している 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);

ありがとうミリムース

4

0 に答える 0