从Class类型调用静态方法

克莱西奥·门德斯(ClésioMendes)

我想将一个类对象存储在局部变量中,然后调用其静态方法。另外,类对象应具有后代类型:

class Ancestor {
   static void staticMethod() {
   }
}
class Descendent extends Ancestor {
}

(...)

Class<? extends Ancestor> fool = Descendent.class;
fool.staticMethod() //compilation error 'cannot resolve symbol'

你们将如何解决呢?

兆赫

您的问题中有多个错误,但是我给您的答案是什么。首先请注意,您使用的是默认可见性包。因此,该方法只能由同一包中的类看到。

您提供的以下代码段无效:

Class<Ancestor> fool = Descendent.class;

有效版本为:

 Class<? extends Ancestor> fool = Descendant.class; 

与静态方法调用有关。您不能仅使用类对象来调用类的静态方法。可以通过反射来调用该方法。看起来可能如下所示:

fool.getDeclaredMethod("staticMethod").invoke(null);

在这种情况下,有两种特殊的行为。

  1. 静态方法将以null作为对象参数调用
  2. 它仅适用于声明静态方法的类对象,不适用于使用静态方法扩展类的类。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章