通过反射将方法调用为静态方法和作为类方法之间的区别



我有一行这样的代码:

ConfiguationManagerUtils.class.getResource(resourceName);

我不明白为什么在这里使用反射。像静态类方法一样调用它有什么区别:

ConfiguationManagerUtils.getResource(resourceName);

它根本不使用反射。在第一个代码段中调用的getResource(String)方法根本不会在ConfigurationManagerUtils上声明 - 它是在Class类上声明的,作为实例方法。如果第二个代码片段也可以工作,那是因为有一个在ConfigurationManagerUtils(或超类)中声明的静态getResource(String)方法。这很可能与Class.getResource()完全不同

第一个代码片段只是使用类文字(ConfigurationManagerUtils.class)来获取对Class实例的引用,它可以在其上调用getResource(String)实例方法。

在此代码中,您调用对象的非静态方法Class引用您的ConfiguationManagerUtils类:

ConfiguationManagerUtils.class.getResource(resourceName);

在此代码中,调用ConfiguationManagerUtils类的静态方法。

ConfiguationManagerUtils.getResource(resourceName);

这不是使用反射,您只是访问ConfiguationManagerUtilsclass属性。

这两个调用之间存在很大差异。

  1. ConfiguationManagerUtils.class.getResource(resourceName); 调用ConfiguationManagerUtils类对象的方法getResource()。不是您在类 ConfiguationManagerUtils 中定义的那个。

  2. ConfiguationManagerUtils.getResource(resourceName); 调用类ConfiguationManagerUtils中的方法。即, 该方法在类内部的代码中定义ConfiguationManagerUtils.

最新更新