通过反射调用子类的方法



这是我的超类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将是Animal。在运行时Tiger

所以,我做了

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

如何通过反射调用subclassRun方法。

是的,我可以做

((Tiger)a).Run();

但我怎么能在反思中做到这一点呢!

您正在一个null实例上调用一个实例方法,因此您收到一个NPE是有意义的。请尝试此操作(将实例传递给invoke方法,而不是null):

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

注意:第一个调用成功了,因为您可以在不引起NPE的情况下对null实例调用静态方法。

您有两个选择,一个是使run()方法保持静态并保持当前调用,另一个是更改当前调用以传递assylias所指向的对象实例。

相关内容

  • 没有找到相关文章

最新更新