2

これが私のスーパークラスですAnimal

class Animal
{
   //Empty
}

私のサブクラスTiger

class Tiger extends Animal
{
    public static void TigerPrint()
    {     -------
        System.out.println("Tiger");
    }
    public void Run()
    {
         System.out.println("Tiger Running");
    }
}

今私がやります、

  Animal a=new Tiger();

コンパイル時a.AtAnimal実行Tiger.

だから、私はやった

a.getClass().getMethod("TigerPrint").invoke(null);//WORKS
a.getClass().getMethod("Run").invoke(null);//NOT WORKING (NullPointerException)

リフレクションRunを介してメソッドを呼び出すにはどうすればよいですか。subclass

はい、できます

((Tiger)a).Run();

しかし、どうすればリフレクションでそれを行うことができますか!

4

2 に答える 2

7

null インスタンスでインスタンス メソッドを呼び出しているため、NPE を受け取るのは理にかなっています。invoke代わりにこれを試してください (メソッドの代わりにインスタンスを渡しますnull):

a.getClass().getMethod("Run").invoke(a);

注: NPE を発生させずに null インスタンスで静的メソッドを呼び出すことができるため、最初の呼び出しは機能しました。

于 2013-02-10T18:36:36.523 に答える
0

run()メソッドを静的にして現在の呼び出しのままにするか、現在の呼び出しを変更して assylias が指すオブジェクト インスタンスを渡すかの 2 つの選択肢があります。

于 2013-02-10T18:41:09.753 に答える